修剪字符串中的多个字符

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() 不会出错,因此可能永远不会是需要保留的领先空间,这就是为什么我说“这可能没有区别”,我把我的赞成票留在原地。

以上是关于修剪字符串中的多个字符的主要内容,如果未能解决你的问题,请参考以下文章

选择多个带有文本的容器并修剪前150个字符

修剪字符串中的最后一个字符

从 .NET 中的字符串末尾修剪字符串 - 为啥会丢失?

修剪字符串中的额外字符(截断字符串)

如何修剪数组中的所有字符串? [复制]

字节数组中的字符串不会在 C# 中被修剪?