我想要执行substring.equals("\n")
。在下面的代码中,我取最后一个字符并检查它是否是换行符。
String substring = nextResult.length() > 1 ? nextResult.substring(nextResult.length() - 1) : nextResult;
return substring.equals("\n") ? /* do stuff */ : /* do other stuff */;
我只使用最后一个字符,因为Java将\n
作为一个char
。但是,从我看到的情况来看,substring.equals("\n")
会为空格(true
)返回" "
,我认为标签(\t
)。是这样吗?
如何正确检查字符串的结尾是换行符,还是至少字符串是换行符?
答案 0 :(得分:3)
这不行吗?似乎至少从1.5.0开始http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/String.html#endsWith(java.lang.String)
答案 1 :(得分:3)
您可以使用String#endsWith
:
boolean endsWithNewline = nextResult.endsWith("\n");
boolean endsWithNewLine = nextResult.charAt(nextResult.length() - 1) == '\n';
但是,您当前的代码对我来说很好。也许你的输入中有某种拼写错误。
答案 2 :(得分:1)
我猜你的nextResult变量有问题,因为这对我来说很好:
public class Test{
public static void main(String... args){
System.out.println("\t".equals("\n")); //false
System.out.println(" ".equals("\n")); //false
System.out.println("\n".equals("\n")); //true
}
}
确保nextResult确实包含您认为它的功能,如果是,请发布使用硬编码字符串的MCVE来向我们展示出现了什么问题。
编辑:我已修改上面的示例以使用子字符串,它仍然可以正常工作:
public class Test{
public static void main(String... args){
String endsWithNewline = "test\n";
String substring = endsWithNewline.substring(4);
System.out.println(substring.equals("\t")); //false
System.out.println(substring.equals(" ")); //false
System.out.println(substring.equals("\n")); //true
}
}
答案 3 :(得分:0)
你的问题没有多大意义,你的意见也不是你认为的那样 -
// The first one will equal "\n" the second won't.
String[] arr = { "hi\n", "hi " };
for (String nextResult : arr) {
String substring = nextResult.substring(nextResult.length() - 1);
if (substring.equals("\n")) {
System.out.println("Yes: " + nextResult);
} else {
System.out.println("No: " + nextResult);
}
}
输出
Yes: hi
No: hi
答案 4 :(得分:0)
为了检查某些内容是否为新的行符号,我会使用Guava
CharMatcher
类。
final String breakingWhitespace = "\n\r";
Assert.assertTrue(CharMatcher.BREAKING_WHITESPACE.matchesAllOf(whitespace));
还有许多其他匹配变体:
查看here以获取文档。
使用这种方法的主要优点是它适合真正许多“新行”(或空格)字符(仅look at the code)。