Java:测试String是否以换行符结尾

时间:2014-09-09 15:50:25

标签: java string

我想要执行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)。是这样吗?

如何正确检查字符串的结尾是换行符,还是至少字符串是换行符?

5 个答案:

答案 0 :(得分:3)

答案 1 :(得分:3)

您可以使用String#endsWith

boolean endsWithNewline = nextResult.endsWith("\n");

String#charAt

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

还有许多其他匹配变体:

  • 匹配(char)的
  • matchesAllOf(CharSequence的)
  • matchesAnyOf(CharSequence的)
  • matchesNoneOf(CharSequence)

查看here以获取文档。

使用这种方法的主要优点是它适合真正许多“新行”(或空格)字符(仅look at the code)。