2015-09-29 54 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 
    

    希望这会有所帮助。

    相关问题