2016-05-03 196 views
0

我想知道這是否;返回一個子字符串的內容與返回子字符串本身

public String seeColor(String str) 
{ 
    int l = str.length(); 
    if(l >= 3 && str.substring(0, 3).equals("red")) return "red"; 
    if(l >= 4 && str.substring(0, 4).equals("blue")) return "blue"; 
    else return ""; 
} 

編譯的速度比較快;

public String seeColor(String str) 
{ 
    int l = str.length(); 
    if(l >= 3 && str.substring(0, 4).equals("red")) return str.substring(0, 4); 
    if(l >= 4 && str.substring(0, 5).equals("blue")) return str.substring(0, 5); 
    else return ""; 
} 

或者可能這兩種方式吸吮,還有另一種更有效的方法,我不知道?

+0

爲什麼你關心在編譯時間上的差異,我寧願?它將基本上沒有什麼不同。注意這兩個例子並不相同:第二種情況相當於簡單的返回「;」(刪除兩個條件;忽略空安全),因爲兩個條件都不能匹配。 –

+0

我在CodingBat上做了一個練習,字符串'str'將被其他值取代......我想知道哪種方法是最快的,因爲我試圖在解決問題時總是採用最具性能的方法。 **編輯:** 在真實世界的應用程序中使用哪種方法真的沒有區別? – CaffeinatedSynapse

+0

編譯時間或執行時間? – benbenw

回答

1

每次調用substring做工作,以獲得生成子,因此第一選擇是更有效的。然而,當前的代碼不null安全的(所以我會測試null)和String.startsWith(String)

public String seeColor(String str) 
{ 
    if(str == null) return ""; 
    else if(str.startsWith("red")) return "red"; 
    else if(str.startsWith("blue")) return "blue"; 
    else return ""; 
} 
3

你可以使用下面的代碼以提高性能:

public String seeColor(String str) 
{ 
    if(str.startsWith("red")) return "red"; 
    else if(str.startsWith("blue")) return "blue"; 
    else return ""; 
}