42

对于知道的人来说,这是一个非常基本的问题。

而不是从

"This is my text. 

And here is a new line"

至:

"This is my text. And here is a new line"

我得到:

"This is my text.And here is a new line.

知道为什么吗?

L.replaceAll("[\\\t|\\\n|\\\r]","\\\s");

我想我找到了罪魁祸首。

在下一行,我执行以下操作:

L.replaceAll( "[^a-zA-Z0-9|^!|^?|^.|^\\s]", "");

这似乎导致了我的问题。

知道为什么吗?

我显然正在尝试执行以下操作:删除所有非字符,并删除所有新行。

4

7 回答 7

68

\s是正则表达式中空白字符的快捷方式。它在字符串中没有任何意义。==> 您不能在替换字符串中使用它。您需要在此处准确放置要插入的字符。如果这是一个空间,只需" "用作替换。

另一件事是:为什么使用 3 个反斜杠作为转义序列?在 Java 中两个就足够了。而且您不需要|字符类中的(交替运算符)。

L.replaceAll("[\\t\\n\\r]+"," ");

评论

L没有改变。如果你想得到你需要做的结果

String result =     L.replaceAll("[\\t\\n\\r]+"," ");

测试代码:

String in = "This is my text.\n\nAnd here is a new line";
System.out.println(in);

String out = in.replaceAll("[\\t\\n\\r]+"," ");
System.out.println(out);
于 2012-06-15T10:38:02.113 回答
9

尝试

L.replaceAll("(\\t|\\r?\\n)+", " ");

根据系统,换行是\r\n或者只是\n

于 2012-06-15T10:42:41.947 回答
9

对于不同的操作系统,新的行分隔符是不同的 - '\r\n' 用于 Windows 和 '\n' 用于 Linux。

为了安全起见,您可以使用正则表达式模式\R - Java 8 引入的换行符匹配器

String inlinedText = text.replaceAll("\\R", " ");
于 2019-01-01T16:01:11.367 回答
3

你的正则表达式很好,我会用空字符串替换它

String resultString = subjectString.replaceAll("[\t\n\r]", "");

您希望“文本”之间有一个空格。和“和”对吗​​?

当我通过复制您的样本尝试正则表达式时,我得到了那个空间

"This is my text. "

所以这里一切都很好。也许如果你只是用空字符串替换它就可以了。我不知道你为什么用\s替换它。和交替| 在字符类中不是必需的。

于 2012-06-15T10:40:04.370 回答
3

我找到了这个

String newString = string.replaceAll("\n", " ");

虽然,因为你有一条双线,你会得到一个双倍的空间。我想你可以再做一次 replace all 用一个空格替换双空格。

如果这不起作用,请尝试这样做:

string.replaceAll(System.getProperty("line.separator"), " ");

如果我使用“\n”在“字符串”中创建行,我必须在正则表达式中使用“\n”。如果我使用 System.getProperty() 我必须使用它。

于 2012-06-15T10:43:26.890 回答
0

您可以使用第一个拆分并使用空白重新加入它。它肯定会起作用。

String[] Larray = L.split("[\\n]+");
L = "";
for(int i = 0; i<Larray.lengh; i++){
   L = L+" "+Larray[i];  
}
于 2013-11-27T06:20:43.020 回答
0

这应该处理空格、制表符和换行符:

data = data.replaceAll("[ \t\n\r]*", " ");
于 2020-08-20T05:37:00.160 回答