在字符串中删除多个字符

3
我的程序从文件中读取一些字符串,需要对其进行后处理。文件中的原始文本如下:
A1DY^
BLKSS^
"GH67^"^

在这里,^ 是我用来演示的空格字符。可以看到文件中所有单词都以空格结尾。一些单词被双引号包围。我想把这些字符串存储在我的程序中。

A1DY
BLKSS
GH67

换言之,我想要去掉所有的空格和双引号。如果我使用 str.trim(); 将会移除最后一个空格。因此,第三行将变成 "GH67^"。我还使用了 str.replaceAll("^\"|\"$", ""); 去掉双引号。结果是 GH67^。这意味着我需要再次修剪它。
有没有更好的方法一次性删除所有空格和双引号?请注意,我不想提取字母数字字符,我想修剪特殊字符。

这个能行吗?https://dev59.com/AHI-5IYBdhLWcg3wiY7a - Gaurav Bhor
提取包含字母和数字的字符。如果文件中有DS-DK^,我想保存DS-DK - mahmood
使用 '\0' 而不是空格可能更有用,因为 '\0' 从未被用作字符。 - AppWriter
2个回答

4
这将从您的字符串开头或结尾删除任意数量的引号或空格:
str = str.replaceAll("^[ \"]+|[ \"]+$", "");

2
为了避免新手常见的错误,请在前面添加 str = - Andreas
从技术上讲,去除前导空格与OP的要求相反,但这可能没有任何影响。 - Andreas
@Andreas 你在哪里看到的? - shmosel
OP说:“正如你所看到的,文件中的所有单词都以空格结束。” 当然,OP也尝试过使用trim()函数,它可以从两端修剪空格,但这并不意味着使用trim()是正确的,但由于OP没有认为trim()会出错,所以可能永远不需要保留前导空格,这就是为什么我说:“可能没有区别”,所以我保持我的点赞。 - Andreas

0

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

此外,严格的修剪函数仅在找到前导和尾随一对双引号时才会删除双引号,并且仅有一个这样的集合。

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

为了在单个正则表达式操作中严格实现所有这些内容,请执行以下操作:

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

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

前导的"是可选的,如果存在,则作为捕获组1进行匹配。只有在匹配了前导"时才会匹配尾随的",只有在匹配了尾随的"时才会匹配前导的"。这是通过对可选前导"使用\1反向引用来实现的。如果匹配成功,它们将从结果中删除。

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接