删除字符串中的某些字符,Java

Chr*_*ran 0 java regex string android

我的问题是我想在字符串的某些部分删除字符,但我不知道如何限制删除.

例:

A computer is a general purpose device that can be\n
programmed to carry out a finite set of\n 
millions to billions of times more capable.\n
\n
In this era mechanical analog computers were used\n
for military applications.\n
1.1 Limited-function early computers\n
1.2 First general-purpose computers\n
1.3 Stored-program architecture\n
1.4 Semiconductors and\n
Run Code Online (Sandbox Code Playgroud)

这里的例子是我的字符串的内容,我想要发生的是删除\n上面的第1行和第2行,但不删除第\n5行以后的内容.如何删除\n而不删除其他\n.我的目标是使字符串成为一个没有\n后续行的段落.与示例一样,前3行可以是段落,下一行是子弹形式(示例).我所说的是我不想删除\n项目符号.

字符串的真实内容是动态的.

我已经尝试过String.replaceAll("\n", " ")清楚地使用它将无法正常工作它将删除所有\n我想Regex用来确定什么是Alphanumberic但它会删除一些字母之后\n

Roh*_*ain 10

尝试使用这个正则表达式: -

str = str.replaceAll("(.+)(?<!\\.)\n(?!\\d)", "$1 ");
System.out.println(str);
Run Code Online (Sandbox Code Playgroud)

\n如果它是not precededa dot - termination of a paragraph,它将替换你的a ,它是not followeda digit,当它后跟一个项目符号点时.(比如,你\n的第一个子弹点后跟一个1.2.所以,它不会被替换.).

  • (.+)一开始,确保你没有更换blank line.

这适用于您显示的字符串.

说明: -

  • (.+) - >捕获组,捕获任何内容,至少发生一次.

  • (?<!\\.)- >这叫做negative-look-behind.它匹配string以下内容,只要该字符串前面没有模式中的dot(.)给定negative-look-behind.
    例如: -您不需要在换\n行后更换: - millions to billions of times more capable.\n.

  • (?!\\d)- >这叫做negative -look-ahead.它匹配它后面的字符串,只有当该字符串后面没有digit (\\d)给定negative-look-ahead模式中的给定时.
    例如: -在你的项目符号中,computers\n后跟1.2.哪里1是数字.所以,你不想替换它\n.

  • 现在,$1$2表示在模式匹配捕获的组.既然你只想更换"\n".因此,我们将剩余的模式匹配原样,同时替换"\n"space.

所以,$1代表1st group-(.+)

注意,look-aheadlook-behind正则表达式的non-capturing群体.

有关详细信息,请访问以下链接: -

  • @RohitJain.很好的正则表达式和很好的解释. (3认同)