0

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

例子:

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

这个这里的例子是我的字符串的内容,我想要发生的是删除\n上面的第 1 行和第 2 行,而不是从\n第 5 行开始删除。我如何删除\n而不删除另一个\n. 我的目标是使字符串成为没有\n后行的段落。像示例一样,前 3 行可以是一个段落,下一行是项目符号形式(示例)。我的意思是我不想删除\n项目符号字符。

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

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

4

2 回答 2

10

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

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

这将替换您的\nif 它是not precededa dot - termination of a paragraph,它是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组。

有关更多详细信息,请点击以下链接:-

于 2012-11-05T09:46:24.733 回答
2

我怀疑您的要求是删除第 1 行和第 2 行的 \n 。
你可以做的如下:

  • 把你的字符串分成几段,

  • String[] 数组 = yourString.split("\n");

  • 通过添加 \n 标记连接每个段,第 1,2 行除外

  • 数组[1] + 数组[2] + 数组[3] + '\n' + 数组[4] + '\n' ...// 以此类推

于 2012-11-05T09:41:07.247 回答