java字符串操作性能比較,Java 字符串比較

本文目錄一覽:

java 字符串數組 字符串 比較

比較的規則和數據庫中的order by效果一致

實現代碼如下

/**

* Name: 比較兩個字符串大小

* null自動轉為空,空字符串最大;

*

* @param first 要比較的第一個字符串;

* second 要比較的第二個字符串;

* @return first大於second返回正數;

* first等於second返回0;

* first小於second返回負數;

* 內部異常默認返回0;

* 返回值非固定值;

*/

public static int compareString(String first,String second){

int result = 0;

try{

//null轉空

first = first==null?””:first;

second = second==null?””:second;

//預先記錄字符串長度,避免反覆讀取

int firstLength=first.length();

int secondLength=second.length();

//處理含有空串的特殊情況

if(“”.equals(first) || “”.equals(second)){

//誰長誰小

result = secondLength-firstLength;

}else{

//臨時空間,用來存放ascii碼總和

int firstCount = 0;

int secondCount = 0;

//用純運算得出兩個數中較小的數,實在是bt

int minLength = (secondLength*(firstLength/secondLength) +

firstLength*(secondLength/firstLength))/(firstLength/secondLength +

secondLength/firstLength);

//按兩個字符串中較短的位數去逐位截取,防止越界

for(int i=0;iminLength;i++){

//求ascii碼和

firstCount+=first.substring(i,i+1).getBytes()[0];

secondCount+=second.substring(i,i+1).getBytes()[0];

//和不相等,說明已經比較出了大小

if(firstCount!=secondCount){

break;

}

}

if(firstCount==secondCount){

//長度長的大

result = firstLength-secondLength;

}else{

//總和大的大

result = firstCount-secondCount;

}

}

}catch (Exception e) {}

return result;

}

java如何比較字符串

“==”和equals方法究竟有什麼區別?(這是我的個人總結,很詳細)

答:==操作符專門用來比較兩個變量的值是否相等,也就是用於比較變量所對應的內存中所存儲的數值是否相同,要比較兩個基本類型的數據或兩個引用變量是否相等,只能用==操作符。

如果一個變量指向的數據是對象類型的,那麼,這時候涉及了兩塊內存,對象本身佔用一塊內存(堆內存),變量也佔用一塊內存,例如Objet obj = new Object();變量obj是一個內存,new Object()是另一個內存,此時,變量obj所對應的內存中存儲的數值就是對象佔用的那塊內存的首地址。對於指向對象類型的變量,如果要比較兩個變量是否指向同一個對象,即要看這兩個變量所對應的內存中的數值是否相等,這時候就需要用==操作符進行比較。

equals方法是用於比較兩個獨立對象的內容是否相同,就好比去比較兩個人的長相是否相同,它比較的兩個對象是獨立的。例如,對於下面的代碼:

String a=new String(“foo”);

String b=new String(“foo”);

兩條new語句創建了兩個對象,然後用a,b這兩個變量分別指向了其中一個對象,這是兩個不同的對象,它們的首地址是不同的,即a和b中存儲的數值是不相同的,所以,表達式a==b將返回false,而這兩個對象中的內容是相同的,所以,表達式a.equals(b)將返回true。

在實際開發中,我們經常要比較傳遞進行來的字符串內容是否等,例如,String input = …;input.equals(「quit」),許多人稍不注意就使用==進行比較了,這是錯誤的,隨便從網上找幾個項目實戰的教學視頻看看,裏面就有大量這樣的錯誤。記住,字符串的比較基本上都是使用equals方法。

如果一個類沒有自己定義equals方法,那麼它將繼承Object類的equals方法,Object類的equals方法的實現代碼如下:

boolean equals(Object o){

return this==o;

}

這說明,如果一個類沒有自己定義equals方法,它默認的equals方法(從Object 類繼承的)就是使用==操作符,也是在比較兩個變量指向的對象是否是同一對象,這時候使用equals和使用==會得到同樣的結果,如果比較的是兩個獨立的對象則總返回false。如果你編寫的類希望能夠比較該類創建的兩個實例對象的內容是否相同,那麼你必須覆蓋equals方法,由你自己寫代碼來決定在什麼情況即可認為兩個對象的內容是相同的。

例:

public class compared {

public static void main(String[] args) {

String a = new String(“info”);

String b = new String(“info”);

//a和b是兩個不同的變量,而info是這兩個變量所只對象內存中所存放的值

String c = “info”; //這裡的info是變量c內存中存儲的值

String d = “info”;

int e = 1;

int f = 1;

System.out.println(a.equals(b)); //true 比較的是a和b兩個對象中的內容是否一樣

System.out.println(a == b); //false

System.out.println(“—————–“);

System.out.println(c.equals(d)); //true

System.out.println(c == d); //true

System.out.println(“—————–“);

System.out.println(e == f); //true

System.out.println(“—————–“);

T t1 = new T(3,”aaa”);

T t2 = new T(3,”bbb”);

T t3 = new T(3,”aaa”);

System.out.println(t1.equals(t2)); //false

System.out.println(t1.equals(t3)); //false

//為什麼都是false,因為我們沒有自定義equals方法,所以默認使用了Object的equals方法,而Object方法內部是使用==來比較的,因此此時你比較的永遠都是兩個變量是否指向同一對象,而這時都為新對象,所以為false。

}

}

疑問:String str = “…”;啥意思?

Java中比較字符串的內容是否相等內部是如何比較的?還有比較字符串與比較它的哈希值哪個快?

java中判斷字符串是否相等有兩種方法:1、用「==」運算符,該運算符表示指向字符串的引用是否相同,比如: String a=”abc”;String b=”abc”,那麼a==b將返回true。這是因為在java中字符串的值是不可改變的,相同的字符串在內存中只會存一份,所以a和b指向的是同一個對象;再比如:String a=new String(“abc”); String b=new String(“abc”);那麼a==b將返回false,因為a和b指向不同的對象。2、用equals方法,該方法比較的是字符串的內容是否相同,比如:String a=new String(“abc”); String b=new String(“abc”); a.equals(b);將返回true。所以通常情況下,為了避免出現上述問題,判斷字符串是否相等使用equals方法。

java中兩個字符串如何比較大小

有三種方法實現

第一種直接用字符串類的compareTo方法:

  String t1=”20131011″;

  String t2=”20131030″;

  int result = t1.compareTo(t2);

第二種是把這個日期字符串轉換成long:

  SimpleDateFormat sdf = new SimpleDateFormat(“yyyyMMdd”);

  Date d1 = sdf.parse(t1);

  Date d2 = sdf.parse(t2);

  long result = d1.getTime()-d2.getTime();

第三種是把日期字符串轉換成整形int:

  int int1 = Integer.parseInt(t1);

  int int2 = Integer.parseInt(t2);

  int result = int1-int2;

註:result大於0,則t1t2;

result等於0,則t1=t2;

result小於0,則t1t2;

java幾種切割字符串方法的性能比較

String[] 就是字符串數組的意思。

newstr是字符串數組的引用,newstr.length就是這個字符串數組的長度。

這個其實看API最好,

limit 參數控制模式應用的次數,因此影響所得數組的長度。如果該限制 n 大於 0,則模式將被最多應用 n – 1 次,數組的長度將不會大於 n,而且數組的最後一項將包含所有超出最後匹配的定界符的輸入。如果 n 為非正,那麼模式將被應用儘可能多的次數,而且數組可以是任何長度。如果 n 為 0,那麼模式將被應用儘可能多的次數,數組可以是任何長度,並且結尾空字符串將被丟棄。

原創文章,作者:XOJN,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/142473.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
XOJN的頭像XOJN
上一篇 2024-10-11 11:43
下一篇 2024-10-12 09:43

相關推薦

  • Java JsonPath 效率優化指南

    本篇文章將深入探討Java JsonPath的效率問題,並提供一些優化方案。 一、JsonPath 簡介 JsonPath是一個可用於從JSON數據中獲取信息的庫。它提供了一種DS…

    編程 2025-04-29
  • java client.getacsresponse 編譯報錯解決方法

    java client.getacsresponse 編譯報錯是Java編程過程中常見的錯誤,常見的原因是代碼的語法錯誤、類庫依賴問題和編譯環境的配置問題。下面將從多個方面進行分析…

    編程 2025-04-29
  • Java Bean加載過程

    Java Bean加載過程涉及到類加載器、反射機制和Java虛擬機的執行過程。在本文中,將從這三個方面詳細闡述Java Bean加載的過程。 一、類加載器 類加載器是Java虛擬機…

    編程 2025-04-29
  • Python字符串寬度不限制怎麼打代碼

    本文將為大家詳細介紹Python字符串寬度不限制時如何打代碼的幾個方面。 一、保持代碼風格的統一 在Python字符串寬度不限制的情況下,我們可以寫出很長很長的一行代碼。但是,為了…

    編程 2025-04-29
  • Java騰訊雲音視頻對接

    本文旨在從多個方面詳細闡述Java騰訊雲音視頻對接,提供完整的代碼示例。 一、騰訊雲音視頻介紹 騰訊雲音視頻服務(Cloud Tencent Real-Time Communica…

    編程 2025-04-29
  • Java Milvus SearchParam withoutFields用法介紹

    本文將詳細介紹Java Milvus SearchParam withoutFields的相關知識和用法。 一、什麼是Java Milvus SearchParam without…

    編程 2025-04-29
  • Python棧操作用法介紹

    如果你是一位Python開發工程師,那麼你必須掌握Python中的棧操作。在Python中,棧是一個容器,提供後進先出(LIFO)的原則。這篇文章將通過多個方面詳細地闡述Pytho…

    編程 2025-04-29
  • Python中將字符串轉化為浮點數

    本文將介紹在Python中將字符串轉化為浮點數的常用方法。在介紹方法之前,我們先來思考一下這個問題應該如何解決。 一、eval函數 在Python中,最簡單、最常用的將字符串轉化為…

    編程 2025-04-29
  • Java 8中某一周的周一

    Java 8是Java語言中的一個版本,於2014年3月18日發佈。本文將從多個方面對Java 8中某一周的周一進行詳細的闡述。 一、數組處理 Java 8新特性之一是Stream…

    編程 2025-04-29
  • Java判斷字符串是否存在多個

    本文將從以下幾個方面詳細闡述如何使用Java判斷一個字符串中是否存在多個指定字符: 一、字符串遍歷 字符串是Java編程中非常重要的一種數據類型。要判斷字符串中是否存在多個指定字符…

    編程 2025-04-29

發表回復

登錄後才能評論