1. 程式人生 > >String 類(toCharArray/charAt/equalsIgnoreCase/ startWith/indexOf/split/trim/toLowerCase/substring)

String 類(toCharArray/charAt/equalsIgnoreCase/ startWith/indexOf/split/trim/toLowerCase/substring)

字元與字串的相互轉換:
字元陣列轉化為字串
用建構函式:

  • 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
    }
}