2012-11-07 126 views
1

什麼來比較給定的字符串開始用另一個字符串的最佳方式比較給定字符串開始用另一個字符串

例子:

if("ABCD1234".startsWith("ABCD")){ 
     System.out.println("This is true "); 
    } 

    if("ABCD1234".substring(0,4).equalsIgnoreCase("ABCD")){ 
     System.out.println("This also true "); 
    } 

還是有什麼其他的解決方案?

+2

*什麼是最好的方法... *定義「好」。 – rolve

回答

5

我認爲startsWith()是最好的選擇,因爲它使你的意圖清楚,任何人讀你的代碼。如果您希望在調用方法之前將它們都區分大小寫,請將這兩個值轉換爲相同的大小寫。

String prefix = "ABCD"; 
prefix = prefix.toLowerCase(); 

if("ABCD1234".toLowerCase().startsWith(prefix)) { 
    System.out.println("This is true "); 
} 

如果要格外小心,你可能想傳遞一個LocaletoLowerCase()或者至少確保調用它的兩個字符串,以確保您的代碼passes the Turkey Test

3

另一個解決方案是:

if (s.indexOf("ABCD") == 0) { 
    ... 
} 

不過,我寧願你的第一選擇。

0

當我必須爲工作編寫Java應用程序時,我使用了startsWith方法。

+0

爲什麼c#?看到'java'標籤 – gefei

+0

該語言陳述:java。 –

+0

這個問題已標記爲'Java'。 –

1

使用equalsIgnoreCase可能會更好在大小寫不敏感的情況下,但在子串之前,你應該檢查長度,它也會在內存字符串池中創建一個新的字符串。

另一種方式就像

if("ABCD1234".substring(0,4).compareTo("ABCD")==0){ 
     System.out.println("This also true "); 
    } 
    if("ABCD1234".substring(0,4).compareToIgnoreCase("ABCD")==0){ 
     System.out.println("This also true "); 
    } 

但我認爲startsWith是更好的選擇,在這裏,但要確保大小寫。

1

也是可能的:

"ABCD1234".matches("ABCD.*"); 

許多其他瘋狂的解決方案,在我的腦海:)恕我直言「最好」的方法是使用你的第一個建議。

1

您可以使用StringUtils的Apache的共享:

StringUtils.startsWith("abcdef", "abc") = true 
StringUtils.startsWith("ABCDEF", "abc") = false 
StringUtils.startsWithIgnoreCase("ABCDEF", "abc") = true 

http://commons.apache.org/lang/api-2.5/org/apache/commons/lang/StringUtils.html

+1

爲什麼要使用第三方庫來獲得預定義功能中已有的功能? –

+0

對於第一種方法您是對的,因爲「ABCD1234」.startsWith(「ABCD」)'更清晰。但是如果你不得不忽略這種情況,我寧願使用'StringUtils.startsWithIgnoreCase(「ABCDEF」,「abc」)'因爲它的意圖要清晰得多,它比ABCD1234「.substring(0,4 ).equalsIgnoreCase( 「ABCD」)'。你是對的,僅僅爲一行代碼添加依賴關係可能會被誇大。但我的經驗是,當你必須在系統的一個地方處理字符串時,你可能會在其他地方處理它。 –

+0

@Felix ..同意最後一行,因此也與第二行一致。 :) –

1

說實話,你首先應該問自己的是 「ABCD」 等於 「ABCD」?

如果沒有,那麼我首先想到的解決方案是更好,更清潔和可讀性

如果您answear是肯定的,那麼顯然,你不能使用第一個解決方案

1

我更喜歡第二選擇:

if("ABCD1234".substring(0,4).equalsIgnoreCase("ABCD")){ 
     System.out.println("This also true "); 

在這裏,你還可以通過將字符串轉換爲LowerCase進行檢查。

if(string.toLowerCase().startswith(string2))