String 類(toCharArray/charAt/equalsIgnoreCase/ startWith/indexOf/split/trim/toLowerCase/substring)
阿新 • • 發佈:2018-10-31
字元與字串的相互轉換:
字元陣列轉化為字串
用建構函式:
- public String(char[ ] value) :將字元陣列中所有內容變為字串
- public String(char[ ] value,int offset,int count);:將字元陣列中部分內容變為字串
將字串轉為字元陣列
- public char[ ] toCharArray( );
取得字串中單個字元
- public char charAt(int index); //取得指定字元
public class StringArray { public static void main(String[] args) { //將字元陣列轉為字串 char[] ch1=new char[]{'a','b','c','d','e','f','g'}; String str1=new String(ch1); String str2=new String(ch1,1,3); //從下標1開始數3個字元變為字串 System.out.println(str1); //abcdefg System.out.println(str2); //bcd //取得字串中一個字元 char ch=str1.charAt(3); //取得下標為3的字元 System.out.println(ch); //d //將字串轉為字元陣列 char[] ch2=str1.toCharArray(); for(char num: ch2) { System.out.print(num+"、"); //a、b、c、d、e、f、g、 } } }
面試題:判斷一個字串是否全由數字組成
先拆成字元陣列,然後對字元數組裡每個字元進行判斷。
public class StringArray { public boolean isChar(String str) { char[] ch=str.toCharArray(); //轉為字元陣列 for(int i=0;i<ch.length;i++) { if(ch[i]<'0'||ch[i]>'9') { return false; } } return true; } public static void main(String[] args) { String str=new String("1234abc"); StringArray strArray=new StringArray(); if(strArray.isChar(str)) { System.out.println("str是由數字組成"); } else { System.out.println("str不是由數字組成"); } } }
位元組(byte)與字串的轉換
位元組常用於資料傳輸以及編碼轉換的處理之中。位元組只適合處理二進位制資料。
位元組陣列轉為字串
- public String(byte[ ] value) :將位元組陣列中所有內容變為字串
- public String(byte[ ] value,int offset,int count);將位元組陣列中所有內容變為字串
字串轉為位元組陣列
- public byte[ ] getBytes( );
- public byte[ ] getBytes(String charSetName); : 將字串按照指定編碼轉為位元組陣列
public class CharArray
{
public static void main(String[] args)
{
//將位元組陣列轉化為字串
byte[] by1=new byte[]{1,2,3,4,5,6}; //位元組陣列,每個元素都是一個位元組
String str1=new String(by1); //將位元組陣列全部內容轉化為字串
String str2=new String(by1,1,4);
System.out.println(str1);
System.out.println("******");
System.out.println(str2);
//將字串轉為位元組陣列
byte[] by2=str1.getBytes();
for(int num : by2)
{
System.out.print(num+"、");
}
///將字串按照指定格式轉為位元組陣列
String str3=new String("哈嘍");
byte[] by3=str3.getBytes();
for(int num :by3)
{
System.out.print(num+"、");
}
// byte[] by4=str3.getBytes("UTF-8") //按UTF-8編碼,UTF-8適用於所有語言
// for(int num :by3)
// {
// System.out.print(num+"、");
// }
}
}
將位元組轉為字串輸出後:
字串比較
-
區分大小寫比較:public boolean equals(String anotjerString);
-
不區分大小寫比較:public boolean equalsIgnoreCase(String anotherString);
-
比較兩個字串大小:public int compareTo(String anotherString):
返回大於0:表示大於比較物件,表示兩者之間的差值
返回等於0:兩者相等
返回小於0:表示小於比較物件
如果比較到兩個字串有不相等字元,就返回,不會再判斷後面字元大小。
public class Compare
{
public static void main(String[] args)
{
String str1="hEllo";
String str2="hellO";
System.out.println(str1.equals(str2)); //false 區分大小寫
System.out.println((str1.equalsIgnoreCase(str2))); // true 不區分大小寫
System.out.println(str1.compareTo(str2)); //-32 因為str2的E小於str2的e,小了32,
//如果比較到兩個字串有不相等字元的,就返回,不會再判斷後面字元大小
}
}
字串查詢
- public boolean contains(String str): 判斷str在本字串中是否存在
- public boolean startWith(String str); 判斷是否以指定字串開頭
- public boolean startWith(String str,int index); 從指定位置開始判斷是否以指定字串開頭
- public boolean endWith(String str); 判斷是否以指定字串結尾
- public int indexOf(String str); 從頭開始查詢指定字串,返回字串第一次出現的位置(下標),沒有返回-1
- public int indexOf(String str,int index) ; 從指定位置查詢子串第一次出現位置
- public int lastIndexOf(String str); 從後向前查詢子串位置
- public int lastIndexOf(String str,int index); 從指定位置從後向前查詢子串位置
/////字串查詢
/////字串查詢
public class Compare
{
public static void main(String[] args)
{
String str1="hello world abcd world";
System.out.println(str1.contains("abc")); //true
System.out.println(str1.startsWith("world")); //false 不是以world開頭
System.out.println(str1.startsWith("world",6)); //true 從指定位置下標為6判斷是否以world開頭
System.out.println(str1.indexOf("world")); //返回world第一次出現的位置 6
System.out.println(str1.indexOf("world",8)); // 17 從下標為8開始判斷world第一次出現的位置
System.out.println(str1.lastIndexOf("world")); // 17 //從後向前返回子串地再一次出現位置
//從指定位置從後向前返回子串第一次出現位置
System.out.println(str1.lastIndexOf("world",str1.length()-6)); // 6 向前判斷str1.length()-6是空格 不符合標準就繼續向前判斷
System.out.println(str1.lastIndexOf("world",str1.length()-5)); // 17 str1.lenght()-5是最後一個w位置,判斷是world
System.out.println(str1.endsWith("cd")); //false 判斷是否以cd結尾
}
}
字串替換
- public String replaceAll(String regex,String replacement); //替換所有指定內容 將regex全部替換為replacement
- public String replaceFirst(String regex,String replacement); //替換首個內容 將第一個regex全部替換為replacement
public class Compare
{
public static void main(String[] args)
{
String str="hello world hello";
System.out.println(str.replaceAll("hello","hai")); //hai world hai 將所有hello替換為hai
System.out.println(str.replaceFirst("hello","hai")); //hai world hello 將第一個hello替換為hai
}
}
字串拆分
- public String[ ] split (String regex); :將字串按照指定格式全部拆分
- public String[ ] split (String regex,int limit); //將字串部分拆分,陣列長度為limit
如果超過陣列長度,其餘不拆分。
public class Compare
{
public static void main(String[] args)
{
//全部拆分
String str1="hello world,happy day";
String[] result1=str1.split(" "); // 按空格拆分放到字串陣列中
for(String num :result1)
{
System.out.print(num+"、"); //hello、world,happy、day、拆分成了3個元素
}
//部分拆分
String[] result2 =str1.split(" ",2);
for(String num :result2)
{
System.out.print(num+"、"); //hello、world,happy day、拆分成了2個元素
}
//拆分格式需要轉義
String ip="192.168.2.2"; //IP地址
String[] result3=ip.split("\\."); //如果發現拆分結果不是期望的,那就是拆分格式有誤,可能需要轉義
for(String num : result3)
{
//System.out.print(num+"、"); // 192、168、2、2、
}
//多次拆分
String info="jing 10 |ting 15";
String[] result4=info.split("\\|");
for(int i=0;i<result4.length;i++)
{
String[] result5=result4[i].split(" ");
System.out.println(result5[0]+"是"+result5[1]+"歲"); //jing是10歲 ting是15歲
}
}
}
字串擷取
- public String substring(int beginIndex); 從指定位置擷取到字串結尾 [ 左閉
- public String substring(int beginIndex,int endIndex); 擷取部分內容 左閉右開 [ )
public class Compare
{
public static void main(String[] args)
{
String str="hello world hai day";
System.out.println(str.substring(6));//world hai day
System.out.println(str.substring(0,5)); //hello 左閉右開
}
}
String類的其他方法
- 去掉左右空格,保留其他空格:public String trim( );
- 轉大小寫:
public String toUpperCase( ); :全部轉大寫
public String toLowerCase( ); 全部轉小寫 - 字串長度:public int lenght( );(陣列長度是length,是屬性)
- 判斷字串是否為空(只能判斷是否為空字串即長度是否為0而不是判null)
public String isEmpty( );
public class Compare
{
public static void main(String[] args)
{
//去左右空格,大小寫轉換
String str=" Hello 中國 ";
System.out.println(str.trim()); //"Hello 中國" 只會去掉左右空格
System.out.println(str.toUpperCase()); // " HELLO 中國 " 字母全部轉大寫,但是對漢字無影響
System.out.println(str.toLowerCase()); // " heLLO 中國 " 字母全部轉小寫,但是對字母無影響
//判空
String str2="";
System.out.println(str2.isEmpty());
String str1=null;
//System.out.println(str1.empty()); 如果直接這樣判斷會報錯,但是str1確實是空的
//所以對String類字串判空推薦如下:
if(str1==null||str1.isEmpty())
{
System.out.println("str1是空串");
}
}
}
String類裡沒有字串首字母大寫的方法,所以需要我們自己寫字串首字母大寫的方法:
public class Compare
{
public static String firstUpper(String str)
{
if(str==null|| str.isEmpty()) //需要判斷是否為空
return null;
return str.substring(0,1).toUpperCase()+str.substring(1);
}
public static void main(String[] args)
{
System.out.println(firstUpper("")); //null
System.out.println(firstUpper(null));//null
System.out.println(firstUpper("hello world")); //Hello world
System.out.println(firstUpper("a")); //A
}
}