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
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...