本文目錄一覽:
- 1、java 字符串數組 字符串 比較
- 2、java如何比較字符串
- 3、Java中比較字符串的內容是否相等內部是如何比較的?還有比較字符串與比較它的哈希值哪個快?
- 4、java中兩個字符串如何比較大小
- 5、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