我的问题是我想在字符串的某些部分删除字符,但我不知道如何限制删除。
示例:
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
这个示例是我的字符串的内容,我想要发生的是删除上面第1行和第2行的\n
但不删除第5行中的\n
。 如何删除\n
而不删除其他\n
?。我的目标是在字符串之后将字符串设为不带\n
的段落。与示例一样,前3行可以是段落,下一行是子弹形式(示例)。我所说的是我不想删除项目符号中的\n
。
字符串的实际内容是动态的。
我已经尝试清楚地使用String.replaceAll("\n", " ")
但是无法正常使用它会删除所有\n
我想到使用Regex
来确定什么是Alphanumberic但它会删除一些字母之后\n
答案 0 :(得分:10)
尝试使用此正则表达式: -
str = str.replaceAll("(.+)(?<!\\.)\n(?!\\d)", "$1 ");
System.out.println(str);
如果\n
由not preceded
dot - termination of a paragraph
取代not followed
,digit
取代\n
将取代1.2
一个项目符号。 (例如,第一个项目符号点中的(.+)
后跟blank line
。因此,它不会被替换。)
(.+)
一开始就确保您没有替换(?<!\\.)
。这适用于您显示的字符串。
说明: -
negative-look-behind
- &gt;捕获组,捕获任何内容,至少发生一次。
string
- &gt;这称为dot(.)
。它与negative-look-behind
后面的\n
匹配,前提是该字符串前面没有millions to billions of times more capable.\n
模式中给出的(?!\\d)
。
例如: - 您不需要在行后添加negative -look-ahead
: - digit (\\d)
。
negative-look-ahead
- &gt;这称为computers\n
。它匹配后面的字符串,只有当该字符串后面没有1.2
模式中给出的1
时。
例如: - 在您的项目符号中,\n
后跟$1
。其中$2
是一个数字。因此,您不希望替换"\n"
。
现在,"\n"
和space
代表模式匹配中捕获的组。因为您只想替换$1
。因此,我们将剩余的模式匹配原样,同时将1st group
替换为(.+)
。
因此,look-ahead
代表look-behind
- non-capturing
注意,{{1}}和{{1}}正则表达式是{{1}}个组。
有关详情,请点击以下链接:
答案 1 :(得分:2)
我怀疑你的要求是删除第1行和第2行的\ n 你可以做的如下:
将您的字符串拆分为细分,
String [] array = yourString.split(“\ n”);
通过添加\ n标记来连接每个细分,但第1,2行除外
array [1] + array [2] + array [3] +'\ n'+ array [4] +'\ n'... //等等 所述