我的程序从文件中读取一些必须进行后期处理的字符串。文件中的原始文本看起来像
A1DY^
BLKSS^
"GH67^"^
^
是我用来演示的空格字符。正如您所看到的,文件中的所有单词都以空格结尾。有些词是双引号。我想将这些字符串存储在我的程序中
A1DY
BLKSS
GH67
换句话说,我想修剪所有空格和双引号。如果我使用str.trim();
,它将删除最后一个空格。所以,第三行将是"GH67^"
。我还使用str.replaceAll("^\"|\"$", "");
来修剪双引号。结果是GH67^
。这意味着,我必须再次修剪它。
有没有更好的方法一次删除所有空格和双引号?请注意,我不想提取字母数字字符。我想修剪特殊字符。
答案 0 :(得分:3)
这会从字符串的开头或结尾修剪任意数量的引号或空格:
str = str.replaceAll("^[ \"]+|[ \"]+$", "");
答案 1 :(得分:0)
在严格解释您的问题描述时,您只需删除尾随空格,而不是前导空格而不是其他空白字符(如标签\t
)。
此外,如果找到前导和尾随对,并且只有一个这样的集合,则严格修剪功能将仅删除双引号。
如果存在双引号,则还应删除双引号内的尾随空格。
要在单个正则表达式操作中完成所有这些,严格,请执行以下操作:
str = str.replaceFirst("^(\"?)(.*?) *\\1 *$", "$2");
此正则表达式使用^
和$
锚点来确保它仅匹配整个字符串。
前导"
是可选的,并且匹配为捕获组1(如果存在)。仅当前导"
匹配时才会匹配结尾"
,只有匹配结尾"
才会匹配前导"
。这是使用\1
对可选前导"
的反向引用来完成的。如果匹配,它们将从结果中删除。
不会删除前导空格,但会删除可选尾随"
之前和/或之后的任何尾随空格。
未删除的任何内容都会在第2组中捕获,并保留在替换字符串中。