修剪字符串中的多个字符
Posted
技术标签:
【中文标题】修剪字符串中的多个字符【英文标题】:Trimming multiple characters in a string 【发布时间】:2017-10-16 02:06:20 【问题描述】:我的程序从文件中读取了一些必须进行后处理的字符串。文件中的原文是这样的
A1DY^
BLKSS^
"GH67^"^
^
是我用来演示的空格字符。如您所见,文件中的所有单词都以空格结尾。有些单词是双引号。我想将这些字符串存储在我的程序中
A1DY
BLKSS
GH67
换句话说,我想修剪所有空格和双引号。如果我使用str.trim();
,它将删除最后一个空格。所以,第三行将是"GH67^"
。我还使用str.replaceAll("^\"|\"$", "");
修剪双引号。结果是GH67^
。这意味着,我必须再次修剪它。
有没有更好的方法一次删除所有空格和双引号?请注意,我不想提取字母数字字符。我想修剪特殊字符。
【问题讨论】:
这行得通吗? ***.com/questions/1805518/… 提取字母数字。如果文件中有DS-DK^
,我想保存DS-DK
。
使用 '\0' 代替空格可能更有用,因为 '\0' 从不用作字符。
【参考方案1】:
在对问题描述的严格解释中,您只希望删除 尾随 个空格,而不是前导空格和其他空白字符,如制表符 (\t
)。
此外,如果同时找到前导对和尾随对,并且只有一个这样的集合,则严格修剪函数只会删除双引号。
如果存在双引号,则双引号内的尾随空格也应删除。
要完成所有这些,严格,在单个正则表达式操作中,执行以下操作:
str = str.replaceFirst("^(\"?)(.*?) *\\1 *$", "$2");
这个正则表达式使用^
和$
锚来确保它只匹配整个字符串。
前导 "
是可选的,如果存在,则匹配为捕获组 1。尾随 "
仅在前导 "
匹配时匹配,前导 "
仅在尾随 "
匹配时匹配。这是使用\1
反向引用可选的前导"
来完成的。如果匹配,它们将从结果中删除。
不删除前导空格,但删除可选尾随 "
之前和/或之后的任何尾随空格。
任何未删除的内容都被捕获在第 2 组中,并保留在替换字符串中。
【讨论】:
【参考方案2】:这将从字符串的开头或结尾修剪任意数量的引号或空格:
str = str.replaceAll("^[ \"]+|[ \"]+$", "");
【讨论】:
为防止常见的新手错误,请在前面添加str =
。
从技术上讲,删除前导空格与 OP 的要求背道而驰,但它可能没有任何区别。
@Andreas 你在哪里看到的?
OP 说“你可以看到文件中的所有单词以空格结尾”。当然,OP 也尝试使用trim()
,它从两端修剪,但并不意味着使用trim()
是正确的,但由于 OP 认为trim()
不会出错,因此可能永远不会是需要保留的领先空间,这就是为什么我说“这可能没有区别”,我把我的赞成票留在原地。以上是关于修剪字符串中的多个字符的主要内容,如果未能解决你的问题,请参考以下文章