3

为什么这段代码不起作用?

public static void main(String[] args) {
    String s = "You need the new version for this. Please update app ...";
    System.out.println(s.replaceAll(". ", ".\\\\n").replaceAll(" ...", "..."));
}

这是我想要的输出:

为此,您需要新版本。\n请更新应用...

谢谢提供信息

4

4 回答 4

3

String.replaceAll方法将正则表达式作为第一个参数。

所以你需要转义你的.),因为它在正则表达式中具有特殊含义,它匹配任何字符。

System.out.println(s.replaceAll("\\. ", ".\\\\n").replaceAll(" \\.\\.\\.", "..."));

但是,对于您给定的输入,您可以简单地使用String.replace方法,因为它不需要Regex,并且具有额外的优势。

于 2012-11-22T15:14:29.140 回答
1

您不应该使用replaceAll-replace而是使用。replaceAll当这里不需要时采用正则表达式(因此它会不必要地低效)。

String s = "You need the new version for this. Please update app ...";
System.out.println(s.replace(". ", ".\\n").replace(" ...", "..."));

(另请注意,我已替换".\\\\n"".\\n"此处,这会产生所需的输出。)

于 2012-11-22T15:16:22.640 回答
1

.是一个特殊的正则表达式字符,将匹配任何内容。你需要像这样逃避它:\\.

因此,要匹配三个点,您必须使用以下正则表达式:"\\.\\.\\."

你想要的是

s.replaceAll("\\. ", ".\n").replaceAll(" \\.\\.\\.", "...")
于 2012-11-22T15:14:32.427 回答
0

尝试作为

    System.out.println(s.replace(". ", ".\n").replace(" ...", "..."));

这给了

You need the new version for this.
Please update app...
于 2012-11-22T15:19:47.040 回答