Java字元串操作及與C#字元串操作的不同

来源:https://www.cnblogs.com/jiagoushi/archive/2018/12/03/10061787.html
-Advertisement-
Play Games

每種語言都會有字元串的操作,因為字元串是我們平常開發使用頻率最高的一種類型。今天我們來聊一下Java的字元串操作及在某些具體方法中與C#的不同,對於需要熟悉多種語言的人來說,作為一種參考。進行誡勉 首先,什麼是字元串? 字元串是字元的序列,是作為一種對象而存在。說的直白點,字元串就是一些字元的組合, ...


每種語言都會有字元串的操作,因為字元串是我們平常開發使用頻率最高的一種類型。今天我們來聊一下Java的字元串操作及在某些具體方法中與C#的不同,對於需要熟悉多種語言的人來說,作為一種參考。進行誡勉

首先,什麼是字元串?

字元串是字元的序列,是作為一種對象而存在。說的直白點,字元串就是一些字元的組合,從而構成字元串,例如“abc”就是字元串,"郭志奇"也是一種賜福穿。

我們知道,Java是一種面向對象的高級程式語言。所有事物均為對象,字元串也不例外,也是一種對象,其對應類型為String。

下麵,我們分幾種情況來進行說明字元串:

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

字元串創建

字元串必須先聲明併進行初始化,才能使用,否則編譯器會報出 變數未初始化錯誤。

請註意:Java中字元串定義的類型為String(第一個字母大寫),對於C#程式員來說,看著不太舒服,因為c#中字元串定義為string (第一個字母小寫),但C#中也是有String類的

創建字元串也分幾種方式,可以根據需求靈活組織:

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

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;如果源字元串比目標字元串小,那麼返回負數。

請註意:

1、返回值為0,那麼字元串通過equals比較會相同

2、返回值正整數、負數,是源字元串不同的字元相減所得。

字元串使我們日常開發使用頻率最高的類型,因此要數量掌握字元串的各種操作,以及一些坑點,才能在編碼中輕鬆、愉快的避免各種bug的出現。

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

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1.Js操作css樣式 div.style.width=”100px”.在div標簽內我們添加了一個style屬性,並設定 了width值。這種寫法會給標簽帶來大量的style屬性,跟實際項目是不符。 我們沒有讓css和html分離。 所以如果是為了獲取css樣式 window.getCompute ...
  • 聲明 本系列文章內容全部梳理自以下幾個來源: 《JavaScript權威指南》 "MDN web docs" "Github:smyhvae/web" "Github:goddyZhao/Translation/JavaScript" 作為一個前端小白,入門跟著這幾個來源學習,感謝作者的分享,在其基 ...
  • 即時通訊:支持好友,群組,發圖片、文件,消息聲音提醒,離線消息,保留聊天記錄 (即時聊天功能支持手機端,詳情下麵有截圖) 工作流模塊 1.模型管理 :web線上流程設計器、預覽流程xml、導出xml、部署流程 2.流程管理 :導入導出流程資源文件、查看流程圖、根據流程實例反射出流程模型、激活掛起 3 ...
  • 訪問者模式(Visitor Pattern)的目的是封裝一些於某種數據結構元素之上的操作,一旦這些元素需要修改,接受這個操作的數據結構則可以保持不變。 定義: 封裝一些作用於某種數據結構中的各元素的操作,它可以在不改變數據結構的前提下定義於作用這些元素的新的操作。 訪問者模式的類圖如下。 訪問者模式 ...
  • 備忘錄模式(Memento Pattern)又稱為快照(Snapshot)模式或Token模式。 意思是:在不破壞封裝性的前提下,捕獲一個對象的內部狀態,併在該對象之外保存這個對象。這樣,以後就可以將該對象恢復到原先保存的狀態。 通俗地說,備忘錄模式就是將一個對象進行備份,提供一種程式數據的備份方法 ...
  • 外觀模式又稱為門面模式Facade是一種簡單的設計模式,但是他背後的思想為迪米特原則,理解門面模式更有助於理解迪米特原則--不要和陌生人說話的原則,可以降低系統的耦合程度,本文介紹了外觀模式的意圖,結構,並且給出了java代碼示例。 ...
  • 1、編寫裝飾器,為多個函數加上認證的功能(用戶的賬號密碼來源於文件)要求登錄成功一次,後續的函數都無需再輸入用戶名和密碼 2、編寫裝飾器,為多個函數加上記錄調用功能,要求每次調用函數都將被調用的函數名稱寫入文件 進階練習:1.編寫下載網頁內容的函數,要求功能是:用戶傳入一個url,函數返回下載頁面的 ...
  • 首先併發編程有三大特性: 可見性,有序性,原子性。volatile關鍵字實現了前面兩個特性。那麼它是如何實現這兩個特性的呢? 首先是可見性。可見性主要是讓緩存,直接寫穿透到主存中。然後另外的cpu 通過底層的硬體層面的嗅探,可以發現自己cpu本地的緩存已經失效。然後到主存中直接讀取。現在讓我們來看看 ...
一周排行
    -Advertisement-
    Play Games
  • 前言 本文介紹一款使用 C# 與 WPF 開發的音頻播放器,其界面簡潔大方,操作體驗流暢。該播放器支持多種音頻格式(如 MP4、WMA、OGG、FLAC 等),並具備標記、實時歌詞顯示等功能。 另外,還支持換膚及多語言(中英文)切換。核心音頻處理採用 FFmpeg 組件,獲得了廣泛認可,目前 Git ...
  • OAuth2.0授權驗證-gitee授權碼模式 本文主要介紹如何筆者自己是如何使用gitee提供的OAuth2.0協議完成授權驗證並登錄到自己的系統,完整模式如圖 1、創建應用 打開gitee個人中心->第三方應用->創建應用 創建應用後在我的應用界面,查看已創建應用的Client ID和Clien ...
  • 解決了這個問題:《winForm下,fastReport.net 從.net framework 升級到.net5遇到的錯誤“Operation is not supported on this platform.”》 本文內容轉載自:https://www.fcnsoft.com/Home/Sho ...
  • 國內文章 WPF 從裸 Win 32 的 WM_Pointer 消息獲取觸摸點繪製筆跡 https://www.cnblogs.com/lindexi/p/18390983 本文將告訴大家如何在 WPF 裡面,接收裸 Win 32 的 WM_Pointer 消息,從消息裡面獲取觸摸點信息,使用觸摸點 ...
  • 前言 給大家推薦一個專為新零售快消行業打造了一套高效的進銷存管理系統。 系統不僅具備強大的庫存管理功能,還集成了高性能的輕量級 POS 解決方案,確保頁面載入速度極快,提供良好的用戶體驗。 項目介紹 Dorisoy.POS 是一款基於 .NET 7 和 Angular 4 開發的新零售快消進銷存管理 ...
  • ABP CLI常用的代碼分享 一、確保環境配置正確 安裝.NET CLI: ABP CLI是基於.NET Core或.NET 5/6/7等更高版本構建的,因此首先需要在你的開發環境中安裝.NET CLI。這可以通過訪問Microsoft官網下載並安裝相應版本的.NET SDK來實現。 安裝ABP ...
  • 問題 問題是這樣的:第三方的webapi,需要先調用登陸介面獲取Cookie,訪問其它介面時攜帶Cookie信息。 但使用HttpClient類調用登陸介面,返回的Headers中沒有找到Cookie信息。 分析 首先,使用Postman測試該登陸介面,正常返回Cookie信息,說明是HttpCli ...
  • 國內文章 關於.NET在中國為什麼工資低的分析 https://www.cnblogs.com/thinkingmore/p/18406244 .NET在中國開發者的薪資偏低,主要因市場需求、技術棧選擇和企業文化等因素所致。歷史上,.NET曾因微軟的閉源策略發展受限,儘管後來推出了跨平臺的.NET ...
  • 在WPF開發應用中,動畫不僅可以引起用戶的註意與興趣,而且還使軟體更加便於使用。前面幾篇文章講解了畫筆(Brush),形狀(Shape),幾何圖形(Geometry),變換(Transform)等相關內容,今天繼續講解動畫相關內容和知識點,僅供學習分享使用,如有不足之處,還請指正。 ...
  • 什麼是委托? 委托可以說是把一個方法代入另一個方法執行,相當於指向函數的指針;事件就相當於保存委托的數組; 1.實例化委托的方式: 方式1:通過new創建實例: public delegate void ShowDelegate(); 或者 public delegate string ShowDe ...