2015-09-29 82 views
-2

我試圖顯示一個名稱和一個區域,其中名稱的最後一個字母等於該區域的最後一個字母。下面是我的嘗試,我不能得到完全正確:Java:捕獲字符串的最後一個字母

static void oneLine(String name, String region, 
       int area, long pop, long gdp) 
{ 
    if (name.substring(name.length() - 1) == name.substring(region.length()-1)) 
    { 
     System.out.println(name+" "+region); 
    } 
} 
+0

你可以使用'name.endsWith(region)' – Rustam

回答

2

幾件事情:

  • 您在Java

獲得平等

if (name.substring(name.length() - 1) == name.substring(region.length()-1)) 
    //          ↑ name again!!! 
  • NEVER與==比較字符串兩側name.substring

    if (name.substring(name.length() - 1).equals(region.substring(region.length()-1))) 
    
  • 2

    使用equals(Object anObject)方法,而使用==操作

    if (name.substring(name.length() - 1).equals(region.substring(region.length()-1))){ 
        System.out.println(name+" "+region); 
    } 
    

    Why would you use String.Equals over ==瞭解更多詳情。

    +0

    equels不是'java'。同樣在平等之後,您再次使用'name.substring'而不是'region.substring' –

    +0

    @JordiCastilla謝謝,錯字更正了。 –

    +0

    看不到它,仍然equels ....關於名稱不是一個錯字,是你的錯誤試圖快速回答。順便說一句......你有一個很好的機會得到紀律的徽章不能保持這個答案......你知道這是不好的...... –

    -2

    我會建議不要創建一個字符長的子字符串。

    if (name.charAt(name.length() - 1) == region.charAt(region.length() - 1)) { 
        System.out.println(name + " " + region); 
    } 
    

    編輯

    我不知道人們爲什麼決定downvote,但爲什麼我建議不要製造一個字符長串,我會添加一個解釋。

    if (name.substring(name.length() - 1).equals(region.substring(region.length()-1)) 
    

    substring始終創建一個新的String對象。所以這裏創建兩個新的String對象(一個用於兩個字符串的最後一個字符),僅爲相等比較創建。他們立即有資格獲得下一個可能的垃圾回收,因爲他們以後不會被使用。
    子串方法return (beginIndex == 0) ? this : new String(value, beginIndex, subLen)

    if (name.charAt(name.length() - 1) == region.charAt(region.length() - 1)) 
    

    charAt的相關部分返回該位置處的參考字符。所以平等比較是在字符串實例的一個字符上完成的。
    charAt方法的相關部分return value[index](值爲字符串實例中的char值[])。

    0

    首先,您在條件的兩側都使用了名稱。而是使用:

    if (name.endsWith(region.substring(region.length()-1))) { ... } 
    

    第二,如果你使用的是==String,您使用的身份。這意味着如果您使用相同的物理String對象,則這隻會導致錯誤。所以:

    new String("Something") == new String("Something") // Evaluates to false 
    

    解決這個問題的方法是使用equivolance。這是通過使用equals方法完成的。當impelemnted這種方法必須遵循以下規則:

    1. 反思 - 如果相比於A,返回true
    2. 對稱 - 如果A等於B,那麼B必須等於一個
    3. 可傳遞 - 如果A等於B且B等於C,則A必須等於C
    4. 如果將A與null進行比較,則始終返回false。

    String類實現,這是這樣一種方式,它會檢查,如果字符是相同的。所以:

    new String("Something").equals(new String("Something")) // Evaluates to true 
    
    // BUT 
    
    new String("Something").equals(new String("something")) // Evaluates to false - due to case sensitivity. 
    
    // SO 
    
    new String("Something").equalsIgnoreCase(new String("something")) // Evaluates to true 
    

    希望這會有所幫助。

    相關問題