检查字符串是否包含 \n Java

27

如何检查字符串是否包含 \n 或换行符?

word.contains("\\n")
word.contains("\n")
4个回答

47
如果字符串是在同一个程序中构建的,我建议使用这个方法:
String newline = System.getProperty("line.separator");
boolean hasNewline = word.contains(newline);

但如果你需要使用 \n,这个驱动程序演示了该怎么做:

class NewLineTest {
    public static void main(String[] args) {
        String hasNewline = "this has a newline\n.";
        String noNewline = "this doesn't";

        System.out.println(hasNewline.contains("\n"));
        System.out.println(hasNewline.contains("\\n"));
        System.out.println(noNewline.contains("\n"));
        System.out.println(noNewline.contains("\\n"));

    }

}

导致了
true
false
false
false

作为对你评论的回应:
class NewLineTest {
    public static void main(String[] args) {
        String word = "test\n.";
        System.out.println(word.length());
        System.out.println(word);
        word = word.replace("\n","\n ");
        System.out.println(word.length());
        System.out.println(word);

    }

}

结果显示

6
test
.
7
test
 .

可以工作,但是 s = s.replace("\n", " \n "); 不能将换行符替换为换行符和空格。 - Pit Digger
1
是的。我更新了我的答案。它清楚地显示了换行后的空格。 - corsiKa

11

为了提高可移植性,你应该按照如下方式操作:

public static final String NEW_LINE = System.getProperty("line.separator")
.
.
.
word.contains(NEW_LINE);

除非你确定 "\n" 是你想要的。


8
第二个:
word.contains("\n");

1
请问您能否澄清为什么它不起作用?您的输入是什么,结果是什么,期望的结果又是什么? - Kris Babic
抱歉,我在重建JAR文件后没有重新启动我的tomcat,所以它没有生效。现在它正常工作了,虽然替换的代码 s = s.replace("\n", " \n "); 没有起作用。 - Pit Digger

1
我更倾向于相信JDK而不是系统属性。 以下是一个可行的代码片段。
    private boolean checkIfStringContainsNewLineCharacters(String str){
        if(!StringUtils.isEmpty(str)){
            Scanner scanner = new Scanner(str);
            scanner.nextLine();
            boolean hasNextLine =  scanner.hasNextLine();
            scanner.close();
            return hasNextLine;
        }
        return false;
    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接