首頁 > Java > java教程 > 主體

Java字串詳解的實例介紹

黄舟
發布: 2016-12-19 14:20:51
原創
1343 人瀏覽過

1.建立物件

  對於java程式中的字串直接常數,JVM會使用字串池來保存它們。當第一次使用某個字串直接常數時,JVM會將它放入字串池中進行快取。在一般情況下,字串池中的字串物件不會被垃圾回收。當程式再次需要使用該字串時,無需重新建立新的字串就可以直接讓引用變數直接指向字串中已有的字串。而使用new操作建立的字串物件則不指向字串池中的對象,但是可以使用intern()方法使其指向字串池中的對象。

public class StringDemo1 {
     public static void main(String[] args){
         String str1 ="abc";
         String str2 ="abc";
         String str3 =new String("abc");
         System.out.println(str1==str2);//true
         System.out.println(str1==str3);//false
         }
 }
登入後複製

常見問題

String str3 =new String("abc");
登入後複製

創建了幾個物件?
答:兩個

String str ="ab"+"cd";
登入後複製

創建了幾個物件?


答:一。 "ab"和"cd"都是常數被放在字串池中。因此只建立了一個abcd字串池中並將字串abcd保存在字串池中。

public class StringDemo1 {
    public static void main(String[] args){
        String str1 ="ab";
        String str2 ="cd";
        String str3 ="ab"+"cd";//创建对象并加入字符串池
        String str4 =str1+str2;
        String str5 =str1+"cd";
        System.out.println(str3==str4);//false
        System.out.println(str3==str5);//false

        }
}
登入後複製

由上面代碼可知:只有引號包含文本的方式才創建的String對象才能被添加到字符串池中,對於包含new方法新建對象的”+“連接表達式他所產生的新對像不會被添加到字串池中。


但是有一種情況需要引起我們的注意:

public class StringDemo1 {
    private final static String str1 ="ab";
    private final static String str2 ="cd";
    public static void main(String[] args){
        String str3 ="ab"+"cd";//创建对象并加入字符串池
        String str4 =str1+str2;
        String str5 =str1+"cd";
        System.out.println(str3==str4);//true
        System.out.println(str3==str5);//true

        }
}
登入後複製

這又是為什麼呢?原因是這樣的,對於常數來講。它的值是固定的,因此在編譯期間就能被確定了。


將上面的程式碼稍加改變看看會出現什麼情況。

public class StringDemo1 {
     private final static String str1 ;
     private final static String str2;
     static{
     str1="ab";
     str2="cd";
     }
     public static void main(String[] args){
         String str3 ="ab"+"cd";//创建对象并加入字符串池
         String str4 =str1+str2;
         String str5 =str1+"cd";
         System.out.println(str3==str4);//false
         System.out.println(str3==str5);//false

         }
 }
登入後複製

str1和str2雖然被定義為常數,但是她們美譽馬上賦值,在運算出s的值前,她們何時被賦值,以及被賦什麼值都是變數,因此性質和變數一樣。只能在運行時被創建。


2.字串方法

取得方法

•int length()
•char charAt(int index)根據位置取得某個字元在字串中第一次出現的位置
•int indexOf(int ch,int fromIndex)從fromIndex指定位置開始,取得ch在字串中第一次出現的位置
•int indexOf(String str)
•int indexOf(String str,int fromIndex)
•int lastIndexOf(int ch)

判斷方法

•boolean contains(String str) 另一種判斷方法:if(str.index(str)!=-1)

•boolean startsWith( String str)
•boolean endsWith(String str)
•bolean isEmpty(String str)
•boolean equals(String str)
•boolean equalsIgnoreCase(String str);

•boolean equalsIgnoreCase(String str);•

•boolean equalsIgnoreCase(String str);•


•boolean equalsIgnoreCase(String str);•

•boolean equalsIgnoreCase(String str);

建構子

1.String(char[] chs)

2.String(char[] chs,offset,count)將字元陣列中的一部分轉成字串。

靜態方法

1.static String copyValueOf(char[] chs)

2.static String copyValueOf(char[] chs,int offset,int count)

3.static 4.static String valueOf(char[] chs,int offset,int count)


•將字串轉換成字元陣列

char[] toCharArray


•將字元陣列轉換成字串
•將字串轉換成字串位元組數組

byte[] toBytes

替換方法

String replace(olderStr,newStr)

切割方法

String split(regex)gin

獲取子字串[編輯分類String subString(begin,end)包含頭不包含尾

將字串轉換成大小寫Android(10)

String toUpperCase()

String toLowerCase()

將字串兩端的空格去除

String toLowerCase()

將字串兩端的空格去除

()

對兩個字串進行自然順序的比較

int compareTo(String str)

3.String 練習

1.字串翻轉

public class StringDemo2 {
     public static void main(String[] args){
         String str = "avdkfasjks";
         reverseMethod_1(str);
     }
     public static void reverseMethod_1(String str){
         for(int i=str.length();i>0;i--){
             System.out.print(str.charAt(i-1));
         }
     }
 }
登入後複製

2.取得最大相同子字串

1.字串翻轉

public class StringDemo2 {
    public static void main(String[] args){
        String str1 = "avdkfasjks";
        String str2 = "ewavdrtte";
        System.out.println(commonMaxSubstring(str1, str2));
    }
    public static String commonMaxSubstring(String str1,String str2){
        int len = str1.length();
        String str3 = null;
        outer:
            //i为子串的长度
            for(int i = len;i>0;i--){
                //j为子串的脚标
                for(int j=0;j<len-i+1;j++){
                    str3=str1.substring(j,j+i);
                    if(str2.contains(str3))
                        break outer;

                }
            }
        return str3;
    }
}
登入後複製
2.取得最大相同子字串

reee Java字串詳解的實例介紹的內容,更多相關內容請關注PHP中文網(www.php.cn)! 


相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新問題
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!