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

Java:捕获字符串的最后一个字母,java,if-statement,substring,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.ou

我试图显示一个名字和一个区域,名字的最后一个字母等于这个区域的最后一个字母。以下是我的尝试,我不能完全正确:

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);
    }
 }
使用方法而不是使用
==
运算符

if (name.substring(name.length() - 1).equals(region.substring(region.length()-1))){
  System.out.println(name+"  "+region);
 }
有关更多详细信息,请参阅。

两件事:

  • 您将在等式的两侧获得
    name.substring

       if (name.substring(name.length() - 1)  == name.substring(region.length()-1))
       //                                        ↑ name again!!! 
    
  • Java


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

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))
编辑

我不知道为什么人们决定否决投票,但我会补充一个解释,为什么我不建议创建一个字符长的子字符串

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))
子字符串
总是创建一个新的字符串对象。因此,这里创建了两个新字符串对象(一个用于两个字符串的最后一个字符),仅用于相等比较。它们立即有资格进行下一次可能的垃圾收集,因为它们以后不会被使用。
子字符串方法
返回的相关部分(beginIndex==0)?此:新字符串(值、beginIndex、SubCN)

charAt
返回对该位置字符的引用。因此,相等比较是在该字符串实例的一个字符上进行的。

charAt方法的相关部分
返回值[index]
(字符串实例中的值是char value[])。

首先,在条件的两侧使用name。而是使用:

if (name.endsWith(region.substring(region.length()-1))) { ... }
其次,如果将
==
字符串一起使用,则使用的是标识。这意味着,只有在使用相同的物理
字符串
对象时,才会产生true。因此:

new String("Something") == new String("Something") // Evaluates to false
解决这个问题的方法是使用模棱两可。这是通过使用
equals
方法完成的。当强制执行此方法时,必须遵循以下规则:

  • 反身-如果将A与A进行比较,则返回true
  • 对称-如果A等于B,那么B必须等于A
  • 可传递-如果A等于B,B等于C,那么A必须等于C
  • 如果将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
    

    希望这有帮助。

    equals不是
    java
    。同样,在等于之后,您再次使用
    name.substring
    而不是
    region.substring
    无法看到它,仍然等于。。。。关于名字并不是一个拼写错误,而是你们试图快速回答的错误。顺便提一下你有一个很好的机会得到纪律徽章,而不是这个答案。。。你知道这很糟糕…@JordiCastilla是的,当然是错了,这就是我说打字错误的原因。尽管如此,还是要谢谢你的指点。对不起,不。。。。a是指当你误点击键盘上的一个字母时,例如,
    equals
    ,你首先纠正的是
    name.substring
    这是一个错误,与“是”无关,你是对的,但我说的是相等的拼写。你可以使用
    name.endsWith(region)