Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/382.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用正则表达式将新行/换行符替换为空格_Java_Regex - Fatal编程技术网

Java 使用正则表达式将新行/换行符替换为空格

Java 使用正则表达式将新行/换行符替换为空格,java,regex,Java,Regex,对于了解情况的人来说,这是一个非常基本的问题 而不是从 “这是我的文本。 这是一条新的路线“ 致: “这是我的文本。这是一行新词” 我得到: “这是我的文本。这里有一行新词。 知道为什么吗 L.replaceAll(“[\\\t\\\n\\\r],“\\\s”); 我想我找到了罪犯 在下一行中,我将执行以下操作: L.replaceAll(“[^a-zA-Z0-9| ^!| ^?| ^.| ^\\s]”,”; 这似乎引起了我的问题 知道为什么吗 显然,我正在尝试以下操作:删除所有非字符

对于了解情况的人来说,这是一个非常基本的问题

而不是从

“这是我的文本。
这是一条新的路线“
致:

“这是我的文本。这是一行新词”
我得到:

“这是我的文本。这里有一行新词。
知道为什么吗

L.replaceAll(“[\\\t\\\n\\\r],“\\\s”);
我想我找到了罪犯

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

L.replaceAll(“[^a-zA-Z0-9| ^!| ^?| ^.| ^\\s]”,”;
这似乎引起了我的问题

知道为什么吗


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

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

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

String resultString = subjectString.replaceAll("[\t\n\r]", "");
你希望在“文本”和“和”之间有一个空格,对吗

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

"This is my text. "
所以这里一切都很好。如果你只是用空字符串替换它,它可能会起作用。我不知道为什么你要用\s替换它。而且在字符类中不需要交替使用。

试试看

L.replaceAll("[\\t\\n\\r]+"," ");
L.replaceAll("(\\t|\\r?\\n)+", " ");
根据系统的不同,换行符可能是
\r\n
,也可能只是
\n

我找到的

虽然,因为你有一条双线,你会得到一个双空格。我想你可以再做一次“全部替换”,用一个单空格替换双空格

如果这不起作用,试着做:

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

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

您可以使用first split并使用空白重新连接它。 它肯定会有用的

String[] Larray = L.split("[\\n]+");
L = "";
for(int i = 0; i<Larray.lengh; i++){
   L = L+" "+Larray[i];  
}
String[]Larray=L.split([\\n]+”);
L=“”;

对于(int i=0;i不同的操作系统,新行分隔符是不同的-“\r\n”用于Windows,而“\n”用于Linux

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

String inlinedText = text.replaceAll("\\R", " ");

这应该考虑到空间、制表符和换行符:

data = data.replaceAll("[ \t\n\r]*", " ");

你能不能只做
L.replaceAll(“[\\\t\124\\\ n\124\\\ r]”,“”)
?我试过了,但似乎不起作用。
L.replaceAll(“[\\t\124;\\ n\124;\\ r]”,“”);
也似乎不起作用。您可能希望在字符类之后添加一个
+
,这样每个空格字符序列只能有一个空格。@jasonm I更新了我的解决方案。更改后的字符串将返回,
L
不会更改。这是您的问题吗?`//g_L=L.replaceAll(“[\\r?\\n | \\t]+”,“);//对所有非字符进行规范化_L=_L.replaceAll(“[^a-zA-Z0-9 | ^!| ^ | ^ | s],”);//对句子进行规范化_L=_.replaceAll(“[?!!”,“)ode>(它会在内部解释为换行符),但换行符是直接的(我认为是0x0A)。但是由于正则表达式中的所有其他反斜杠都需要加倍(
\s
\b
),总是使用双反斜杠是惯例。@jasonm您能保存您的文件以便我们下载吗?这当然可以让我们诊断发生了什么事……而且,
不属于那里。不需要指定或在字符类中,所以
只匹配一个文本
@alanmore当然,一个在字符类中不需要进行替换这是错误的。
意味着字符类中有一个文字问号(正如
|
在这里也是文字)。四个反斜杠是多余的,即使对于Java也是如此。编辑:但这是@adarshr的错误,因为在重新格式化答案时没有去掉额外的反斜杠:)哦,对不起,我没有意识到这一点。很高兴它现在被修复了。感谢您提供了这个替代答案。我试图解决一个类似的问题-用主机的标准换行符替换所有操作系统的换行符,并且这种方法可以适应该问题-下面是正则表达式:(\\r?\\n)+“@Keppli我通过
|\\n
扩展了您的方式,因此无论存在哪种换行符。