修剪字符串中的多个字符

时间:2017-05-16 20:16:08

标签: java string

我的程序从文件中读取一些必须进行后期处理的字符串。文件中的原始文本看起来像

A1DY^
BLKSS^
"GH67^"^

^是我用来演示的空格字符。正如您所看到的,文件中的所有单词都以空格结尾。有些词是双引号。我想将这些字符串存储在我的程序中

A1DY
BLKSS
GH67

换句话说,我想修剪所有空格和双引号。如果我使用str.trim();,它将删除最后一个空格。所以,第三行将是"GH67^"。我还使用str.replaceAll("^\"|\"$", "");来修剪双引号。结果是GH67^。这意味着,我必须再次修剪它。

有没有更好的方法一次删除所有空格和双引号?请注意,我不想提取字母数字字符。我想修剪特殊字符。

2 个答案:

答案 0 :(得分:3)

这会从字符串的开头或结尾修剪任意数量的引号或空格:

str = str.replaceAll("^[ \"]+|[ \"]+$", "");

答案 1 :(得分:0)

在严格解释您的问题描述时,您只需删除尾随空格,而不是前导空格而不是其他空白字符(如标签\t)。

此外,如果找到前导和尾随对,并且只有一个这样的集合,则严格修剪功能将仅删除双引号。

如果存在双引号,则还应删除双引号内的尾随空格。

要在单个正则表达式操作中完成所有这些,严格,请执行以下操作:

str = str.replaceFirst("^(\"?)(.*?) *\\1 *$", "$2");

此正则表达式使用^$锚点来确保它仅匹配整个字符串。

前导"是可选的,并且匹配为捕获组1(如果存在)。仅当前导"匹配时才会匹配结尾",只有匹配结尾"才会匹配前导"。这是使用\1对可选前导"的反向引用来完成的。如果匹配,它们将从结果中删除。

不会删除前导空格,但会删除可选尾随"之前和/或之后的任何尾随空格。

未删除的任何内容都会在第2组中捕获,并保留在替换字符串中。