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)