Java:捕获字符串的最后一个字母

时间:2015-09-29 11:35:02

标签: java if-statement substring

我正在尝试显示名称和区域,其中名称的最后一个字母等于该区域的最后一个字母。以下是我无法做到的尝试:

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);
    }
 }

4 个答案:

答案 0 :(得分: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 ==

答案 1 :(得分:2)

一些事情:

  • 您在平等双方都获得了name.substring

       if (name.substring(name.length() - 1)  == name.substring(region.length()-1))
       //                                        ↑ name again!!! 
    
  • 永远不要将字符串与==

  • 中的Java进行比较

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

答案 2 :(得分:0)

首先,您在条件的两侧使用名称。而是使用:

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

其次,如果您将==String一起使用,那么您正在使用身份。这意味着如果您使用相同的phisical String对象,这只会导致true。所以:

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

解决这个问题的方法是使用等值。这是通过使用equals方法完成的。当受到限制时,此方法必须遵循以下规则:

  1. 反身 - 如果将A与A进行比较,则返回true
  2. symmetric - 如果A等于B,则B必须等于A
  3. 及物 - 如果A等于B且B等于C,则A必须等于C
  4. 如果将A与null进行比较,则始终返回false。
  5. 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
    

    希望这有帮助。

答案 3 :(得分:-2)

我建议不要创建一个长字符串。

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

修改

我不知道为什么人们决定进行投票,但我会添加一个解释,为什么我建议不要创建一个长字符串。

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]的相关部分(String实例中的值为char value [])。