Java字符串操做及與C#字符串操做的不一樣

每種語言都會有字符串的操做,由於字符串是咱們日常開發使用頻率最高的一種類型。今天咱們來聊一下Java的字符串操做及在某些具體方法中與C#的不一樣,對於須要熟悉多種語言的人來講,做爲一種參考。進行誡勉java

首先,什麼是字符串?程序員

字符串是字符的序列,是做爲一種對象而存在。說的直白點,字符串就是一些字符的組合,從而構成字符串,例如「abc」就是字符串,"郭志奇"也是一種賜福穿。c#

咱們知道,Java是一種面向對象的高級程序語言。全部事物均爲對象,字符串也不例外,也是一種對象,其對應類型爲String。數組

下面,咱們分幾種狀況來進行說明字符串:學習

  1. 字符串的建立
  2. 字符串操做
    1. 字符串鏈接
    2. 字符串長度
    3. 字符串查找
    4. 獲取指定索引的字符
    5. 去重空格
    6. 判斷相等
    7. 大小寫轉換
    8. 字符串分隔
    9. 字符串比較

字符串建立編碼

字符串必須先聲明並進行初始化,才能使用,不然編譯器會報出 變量未初始化錯誤。spa

請注意:Java中字符串定義的類型爲String(第一個字母大寫),對於C#程序員來講,看着不太舒服,由於c#中字符串定義爲string (第一個字母小寫),但C#中也是有String類的code

建立字符串也分幾種方式,能夠根據需求靈活組織:對象

String(char a[])--Java代碼 blog

1         char a[] = { 'a', 'b', 'c' };
2         String source = new String(a);
3         System.out.println(source);//輸出結果爲abc

String(char a[],int offset,int length)--Java代碼 

1         char a[] = { 'a', 'b', 'c' };
2         String source = new String(a, 1, 2);
3         System.out.println(source);//輸出爲bc

字符串常量:

String source=「郭志奇」;

1         String source = "郭志奇";
2         String source1 = "郭志奇";
3         System.out.println(source == source1);// 輸出true
4         System.out.println(source.equals(source1));// 輸出true

此處簡單提一下,Java中雙等號== 表示的是引用是否相同,equals比較的是實際的字符串值。

對應的C#代碼

1             string source = "郭志奇";
2             string source1 = "郭志奇";
3             Console.WriteLine(source==source1);//輸出True
4             Console.WriteLine(source.Equals(source1));//輸出True
5             Console.WriteLine(string.ReferenceEquals(source,source1));//輸出True
6             Console.Read();

在C#中雙等號以及equals比較的是實際的值,而refreshEquals比較的是引用是否相同。和Java略有不一樣。

 

字符串操做

  1. 字符串鏈接
    經過加號+能夠將兩個字符串進行鏈接。請注意,字符串與其餘類型鏈接,會自動調用其toString方法轉換成字符串,而後進行拼接。
    Java代碼:
    1         String source = "郭志奇";
    2         String source2 = "郭語晨";
    3         String source3 = source + source2;
    4         System.out.println(source3);// 輸出郭志奇郭語晨
    5         String source4 = source + 521;// 字符串與數字拼接
    6         System.out.println(source4);//輸出郭志奇521


    concat:字符串拼接

    1         String source = "郭志奇";
    2         String source2 = "郭語晨";
    3         String source5 = source.concat(source2);
    4         System.out.println(source5);// 輸出郭志奇郭語晨

     

  2. 字符串長度
    經過length()方法獲取字符串長度。請注意:包含字符串中空格的長度。
    Java代碼:
    1         String source = "     郭志奇 ";//前綴包含一個空格及一個tab 後綴包含一個空格
    2         System.out.println(source.length());// 輸出6

    C#代碼:
    找茬:從C#輸出的長度能夠看到,Tab在Java中長度爲1,而在C#長度爲2. 英文tab

    1             string source = "   郭志奇 ";
    2             Console.WriteLine(source.Length);//輸出7

     

  3. 字符串查找
    兩種字符串查找方法:
    indexOf():從字符串開始位置進行查找
    1         String source = "郭志奇";
    2         System.out.println(source.indexOf("郭"));// 輸出0
    3         System.out.println(source.indexOf(""));// 輸出0

    lastIndexOf()方法:從字符串結束位置開始查找

    1         String source = "郭志奇";
    2         System.out.println(source.lastIndexOf("郭"));// 輸出0
    3         System.out.println(source.lastIndexOf(""));// 輸出3

    找茬:indexOf查找空字符串,返回值是0。lastIndexOf方法查找空格,返回值是3.等於字符串的長度。
    查看lastIndexOf對應的C#代碼實現:

    1             string source = "郭志奇";
    2             Console.WriteLine(source.Length);//輸出3
    3             Console.WriteLine(source.LastIndexOf(""));//輸出2
    4             Console.Read();

    經過對比lastIndexOf查找空字符串,能夠發現C#和Java的不一樣,Java返回的是字符串的長度,而C#返回的是字符串長度-1。我的認爲C#的處理更符合目的。

  4. 獲取指定索引的字符
    經過charAt方法獲取指定索引的字符
    1         String source = "郭志奇";
    2         System.out.println(source.charAt(0));//輸出郭
    3         System.out.println(source.charAt(source.length() - 1));//輸出奇

    爲了學習,咱們就要思考,假如我輸入了負數或大於字符串長度的索引會出現什麼呢?代碼驗證

    1         String source = "郭志奇";
    2         System.out.println(source.charAt(-1));
    3         System.out.println(source.charAt(source.length() + 11));

    沒錯,代碼執行出錯了,拋出異常:java.lang.StringIndexOutOfBoundsException

  5. 去重空格
    經過trim方法移除字符串先後空格(包含tab)
    1         String source = " 郭志奇  ";// 先後都有空格
    2         String source1 = "    郭志奇    ";
    3         System.out.println(source.length());
    4         System.out.println(source.trim().length());
    5         System.out.println(source1.length());
    6         System.out.println(source1.trim().length());

    使人遺憾的是,Java沒有提供只清空前綴空格或後綴空格的方法。而C#卻有。

  6. 判斷相等
    兩種判斷字符串相等的方法,雙等號及equals、equalsIgnoreCase
    經過代碼來進行說明:
     1         String source = new String("郭志奇A");
     2         String source1 = new String("郭語晨");
     3         String source2 = "郭志奇A";
     4         String source3 = "郭語晨";
     5 
     6         String source4 = "郭志奇a";
     7 
     8         System.out.println(source == source2);// false
     9         System.out.println(source.equals(source2));// true
    10         System.out.println(source1 == source3);// false
    11         System.out.println(source1.equals(source3));// true
    12 
    13         System.out.println(source == source4);// false
    14         System.out.println(source.equals(source4));// false
    15         System.out.println(source.equalsIgnoreCase(source4));// true

    雙等號表明的是字符串引用是否相同,對於不一樣對象的字符串,雙等號比較是不一樣的。
    equals比較的是字符串的值,但區分大小寫
    equalsIgnoreCase:比較的是字符串的值,不區分大小寫
    進行字符串比較,儘可能避免使用雙等號。

  7. 大小寫轉換
    toUpperCase轉換成大寫形式,toLowerCase轉換成小寫形式。但對於數字、空格則會忽略,不進行轉換。比較簡單
  8. 字符串分隔
    經過split方法進行字符串分隔,split參數是分隔符,返回值是分割後的字符串數組。較簡單。
  9. 字符串比較
    經過compareTo方法進行字符串比較,

 

 1         String source = "ab";
 2         String source1 = "ba";
 3         String source2 = "ab";
 4         System.out.println(source.compareTo(source1));//返回值-1
 5         System.out.println(source.compareTo(source2));//返回值0
 6         System.out.println(source1.compareTo(source2));//返回值1
 7 
 8         System.out.println(source.compareToIgnoreCase(source1));//返回值-1
 9         System.out.println(source.compareToIgnoreCase(source2));//返回值0
10         System.out.println(source1.compareToIgnoreCase(source2));//返回值1

compareTo方法會逐個字符進行比較,若是源字符串比目標字符串大,那麼返回正整數;若是源字符串與目標字符串相同,那麼返回0;若是源字符串比目標字符串小,那麼返回負數。

請注意:

一、返回值爲0,那麼字符串經過equals比較會相同

二、返回值正整數、負數,是源字符串不一樣的字符相減所得。

字符串使咱們平常開發使用頻率最高的類型,所以要數量掌握字符串的各類操做,以及一些坑點,才能在編碼中輕鬆、愉快的避免各類bug的出現。

本次說明只介紹了字符串的冰山一角,對於更重要的字符串格式化,本次沒有涉及,由於蛋蛋字符串格式化,就能夠單獨寫一篇更長的博文才能說明。下次再聊。

相關文章
相關標籤/搜索