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

时间:2012-11-05 09:25:08

标签: java android regex string

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

示例:

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

2 个答案:

答案 0 :(得分:10)

尝试使用此正则表达式: -

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

如果\nnot preceded dot - termination of a paragraph取代not followeddigit取代\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'... //等等 所述