Java字符串常見的操作(比較,查找,替換等)
在Java當中,為字符串類提供瞭豐富的操作方法,對於字符串,我們常見的操作就是:字符串的比較、查找、替換、拆分、截取以及其他的一些操作。
在Java中,有String,StringBuffer 和 StringBuilder字符串類,他們的區別是String類是不可修改的,而StringBuffer 和 StringBuilder類是可以修改的。要註意的是,這裡的修改不是字面意思上的修改。簡單來說,比如,要實現兩個字符串的拼接,對於前者來說,假設有str1 = "hello" , 要給他拼接一個"world",那麼是這樣的,在這個過程中,"hello"本身沒有變,它還在池中。但是對於後兩者來說,假設有str2 = "世界",要拼接''你好'',拼接之後,池中就不存在"世界"瞭。StringBuffer 和 StringBuilder的區別就是一個是線程安全的,一個不是線程安全的。
下面,我們圍繞字符串的一些操作來進行說明。
一,字符串的比較
1,equal()方法
官方文檔描述:
public boolean equals(Object anObject)
將此字符串與指定對象進行比較。 其結果是true當且僅當該參數不是null並且是String對象,表示相同的字符序列作為該對象。
參數
anObject – 對比這個 String的對象
結果
true如果給定的對象代表一個 String等效於這個字符串, 否則false
String類當中的equal()方法用來比較兩個字符串是否相等。這一種比較是區分大小寫的。當有一個是字符串常量的時候,建議的寫法是將字符串常量放在外面,這樣的理由是:如果外面的變量是null的時候,就會拋出空指針異常。
String str1 = new String("Hello"); String str2 = new String("Hello"); System.out.println(str1.equals(str2)); // 或者這樣寫也行 // System.out.println(str2.equals(str1)); // 執行結果 //true
String str = new String("Hello"); // 方式一 System.out.println(str.equals("Hello")); // 方式二 System.out.println("Hello".equals(str)); //—————————————————————————————————————— String str = null; // 方式一 // 執行結果 拋出 java.lang.NullPointerException 異常 System.out.println(str.equals("Hello")); // 方式二 // 執行結果 false System.out.println("Hello".equals(str));
如果不需要區分大小寫的比較,使用equalsIgnoreCase()方法。這種方法一般見於驗證碼驗證的時候。
String str1 = "hello" ; String str2 = "Hello" ; //結果為false System.out.println(str1.equals(str2)); //結果為true System.out.println(str1.equalsIgnoreCase(str2));
2,compareTo()方法
官方文檔描述:
public int compareTo(String anotherString)
按字典順序比較兩個字符串。 比較是基於字符串中每個字符的Unicode值。 由該String對象表示的字符序列按字典順序與由參數字符串表示的字符序列進行比較。 如果String對象按字典順序排列在參數字符串之前,結果為負整數。 結果是一個正整數,如果String對象按字典順序跟隨參數字符串。 如果字符串相等,結果為零; compareTo返回0 ,當equals(Object)方法將返回true 。
如果沒有它們不同的索引位置,則較短的字符串按字典順序位於較長的字符串之前。 在這種情況下, compareTo返回字符串長度的差異 – 即值:this.length()-anotherString.length()
參數
anotherString – 要比較的 String 。
結果
如果參數字符串等於此字符串,則值為0 ; 一個值小於0如果這個字符串的字典比字符串參數小; 如果此字符串的字典大小超過字符串參數,則值大於0 。
在String類中compareTo()方法是一個非常重要的方法,該方法返回一個整型,該數據會根據大小關系返回三類內容: 1. 相等:返回0. 2. 小於:返回內容小於0. 3. 大於:返回內容大於0。compareTo()是一個可以區分大小關系的方法,是String方法裡是一個非常重要的方法。它的比較大小規則, 總結成三個字 "字典序" 相當於判定兩個字符串在一本詞典的前面還是後面。先比較第一 個字符的大小(根據 unicode 的值來判定),如果不分勝負,就依次比較後面的內容。
System.out.println("A".compareTo("a")); // -32 System.out.println("a".compareTo("A")); // 32 System.out.println("A".compareTo("A")); // 0 System.out.println("AB".compareTo("AC")); // -1 System.out.println("劉".compareTo("楊")); //比較結果介於unicode碼
二,字符串查找
1,contains()方法
官方文檔描述:
public boolean contains(CharSequence s)
當且僅當此字符串包含指定的char值序列時才返回true。
參數
s – 搜索的順序
結果
如果此字符串包含 s ,則為true,否則為false
用來判斷一個子串是否存在。
String str = "helloworld" ; System.out.println(str.contains("world")); // true
2, indexOf()方法
官方文檔描述:
public int indexOf(int ch)
返回指定字符第一次出現的字符串內的索引。 如果與值的字符ch在此表示的字符序列發生String第一事件發生之對象,則索引(Unicode碼)被返回。如果此字符串中沒有此類字符,則返回-1 。
參數
ch – 一個字符(Unicode代碼點)。
結果
在通過該對象表示的字符序列的字符的第一次出現的索引,或 -1如果字符不會發生。
從頭開始查找指定字符串的位置,查到瞭就返回位置的開始索引(從0開始),如果查不到,就返回-1。
String str = "helloworld" ; System.out.println(str.indexOf("world")); // 5,w開始的索引 System.out.println(str.indexOf("bit")); // -1,沒有查到
3,startsWith()和endsWith()方法
public boolean startsWith(String prefix)
測試此字符串是否以指定的前綴開頭。
參數
prefix – 前綴。
結果
如果由參數表示的字符序列是由該字符串表示的字符序列的前綴那麼返回true; 否則false。 還需要註意的是true如果參數為空字符串或等於該將被返回String如由所確定的對象equals(Object)方法。
public boolean endsWith(String suffix)
測試此字符串是否以指定的後綴結尾。
參數
suffix – 後綴。
結果
true如果由參數表示的字符序列是由該對象表示的字符序列的後綴; false否則。 註意,結果將是true如果參數是空字符串或等於該String如由所確定的對象equals(Object)方法。
String str = "**@@helloworld!!" ; System.out.println(str.startsWith("**")); // true System.out.println(str.startsWith("@@",2)); // ture System.out.println(str.endsWith("!!")); // true
三,字符串替換
replaceAll()方法
public String replaceAll(String regex,String replacement)
用給定的替換替換與給定的regular expression匹配的此字符串的每個子字符串。
請註意,替換字符串中的反斜杠( \ )和美元符號( $ )可能會導致結果與被視為文字替換字符串時的結果不同; 見Matcher.replaceAll 。 如果需要,使用Matcher.quoteReplacement(java.lang.String)來抑制這些字符的特殊含義。
參數
regex – 要匹配此字符串的正則表達式
replacement – 要替換每個匹配的字符串
結果
所得 String
異常
PatternSyntaxException – 如果正則表達式的語法無效
replaceAll()方法將會替換所有的指定的內容。想要替換首個字母的話,使用replaceFirst()方法。要註意的是:由於字符串是不可變對象, 替換不修改當前字符串, 而是產生一個新的字符串。
String str = "helloworld" ; System.out.println(str.replaceAll("l", "_")); //he__owor_d System.out.println(str.replaceFirst("l", "_")); //he_loworld
四,字符串拆分
字符串的拆分是常見的操作,比如在使用BufferedReader進行數據的快速輸入輸出,這個時候,先輸入字符串,在拆分,轉格式後成為int等數據類型。
split()方法
public String[] split(String regex)
將此字符串拆分為給定的regular expression的匹配。
該方法的工作原理是通過使用給定表達式和限制參數為零調用雙參數split方法。 因此,尾隨的空字符串不會包含在結果數組中。
參數
regex – 分隔正則表達式
結果
通過將該字符串圍繞給定的正則表達式的匹配來計算的字符串數組
異常
PatternSyntaxException – 如果正則表達式的語法無效
另外有些特殊字符作為分割符可能無法正確切分, 需要加上轉義符號\\。1,字符"|","*","+"都得加上轉義字符,前面加上"\". 2,如果一個字符串中有多個分隔符,可以用"|"作為連字符。
String str = "hello world hello People" ; String[] result = str.split(" ") ; // 按照空格拆分 for(String s: result) { System.out.println(s); }
String str = "192.168.1.1" ; String[] result = str.split("\\.") ; for(String s: result) { System.out.println(s); }
String str = "name=zhangsan&age=18" ; String[] result = str.split("&") ; for (int i = 0; i < result.length; i++) { String[] temp = result[i].split("=") ; System.out.println(temp[0]+" = "+temp[1]); }
五,字符串截取
substring()方法
官方文檔描述:
public String substring(int beginIndex)
返回一個字符串,該字符串是此字符串的子字符串。 子字符串以指定索引處的字符開頭,並擴展到該字符串的末尾。
參數
beginIndex – 開始索引(含)。
結果
指定的子字符串。
異常
IndexOutOfBoundsException 如果 beginIndex為負或大於此 String對象的長度。
該方法能夠將從一個完整的字符串之中截取出部分內容,從指定索引截取到結尾。要註意的是:1. 索引從0開始 2. 註意前閉後開區間的寫法, substring(0, 5) 表示包含 0 號下標的字符, 不包含 5 號下標。
String str = "helloworld" ; System.out.println(str.substring(5)); // world System.out.println(str.substring(0, 5));//hello
六,字符串其他常見的操作方法
這些常見的操作方法比如:取得字符串的長度,去掉字符串兩邊的空格,保留中間的空格,字符串大小寫轉換,字符串反轉。
1,trim()方法
官方文檔描述:
public String trim()
返回一個字符串,其值為此字符串,並刪除任何前導和尾隨空格。
如果此String對象表示一個空字符序列,或由該代表字符序列的第一個和最後一個字符String對象都具有代碼大於'\u0020' (空格字符),則此參考String被返回對象。
否則,如果字符串中沒有字符大於'\u0020'的字符,則返回一個表示空字符串的String對象。
否則,令k為代碼大於'\u0020'的字符串中第一個字符的'\u0020' ,並且m為代碼大於'\u0020'的字符串中最後一個字符的'\u0020' 。 將返回一個String對象,表示該字符串的子字符串,以索引k處的字符開頭,以索引m為止的字符結束,結果為this.substring(k, m + 1) 。
此方法可用於從字符串的開始和結尾修剪空格(如上定義)。
結果
一個字符串,其值是此字符串,除去任何前導和尾隨空格,或者如果該字符串沒有前導或尾隨的空格,則為該字符串。
trim()方法會去掉字符串開頭和結尾的空白字符(空格, 換行, 制表符等)。
String str = " hello world " ; System.out.println("["+str+"]"); System.out.println("["+str.trim()+"]");
2,toUpperCase()和toLowerCase()方法
官方文檔描述:
public String toUpperCase(Locale locale)
參數
locale – 使用此區域設置的案例轉換規則
結果
String,轉換成大寫。
public String toLowerCase(Locale locale)
參數
locale – 使用此區域設置的案例轉換規則
結果
String ,轉換成小寫。
String str = " hello%$$%@#$%world 哈哈哈 " ; System.out.println(str.toUpperCase()); // HELLO%$$%@#$%WORLD 哈哈哈 System.out.println(str.toLowerCase()); // hello%$$%@#$%world 哈哈哈
3,length()方法
官方文檔描述:
public int length()
返回此字符串的長度。 長度等於字符串中的數字Unicode code units 。
結果
由該對象表示的字符序列的長度。
註意:數組長度使用數組名稱.length屬性,而String中使用的是length()方法。
String str = " hello%$$%@#$%world 哈哈哈 " ; System.out.println(str.length()); //24
3,reverse()方法
String類不提供reverse()方法,該方法存在於StringBuffer和StringBuilder類當中。要使用該方法,就要new出由他們生成的對象來使用。StringBuffer和StringBuilder二者非常相似,在這裡,用StringBuffer來說明。
官方文檔描述:
public StringBuilder reverse()
導致該字符序列被序列的相反代替。 如果序列中包含任何替代對,則將它們視為單個字符進行反向操作。
結果
對這個對象的引用
StringBuffer sb = new StringBuffer("helloworld"); System.out.println(sb.reverse()); //dlrowolleh
到此這篇關於Java字符串常見的操作(比較,查找,替換等)的文章就介紹到這瞭,更多相關Java字符串操作內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- 詳解Java中String類的各種用法
- 一篇文章看懂Java字符串操作
- 淺談Java中String的常用方法
- JAVA基礎類庫之String類,StringBuffer類和StringBuilder類
- 詳解Java中String,StringBuffer和StringBuilder的使用