繁体   English   中英

有没有更好的方法来修剪字符串中的空格和其他字符?

[英]Is there a better way to trim whitespace and other characters from a string?

例如,如果我想从字符串中删除空格尾随逗号,我可以这样做:

String x = "abc,\n";
x.Trim().Trim(new char[] { ',' });

哪个正确输出abc 我可以轻松地将它包装在一个扩展方法中,但是我想知道是否有一种内置的方法可以通过一次调用Trim()这一点。 我已经习惯了Python,我可以这样做:

import string
x = "abc,\n"

x.strip(string.whitespace + ",")

文档声明所有Unicode空白字符 (除了少数例外)都被剥离(请参阅“ 调用者注释”部分),但我想知道是否有办法在没有手动定义扩展方法中的字符数组的情况下执行此操作。

有没有内置的方法来做到这一点? 我想要删除的非空白字符的数量可能会有所不同,并且不一定包含逗号,我想删除所有空格,而不仅仅是\\n

是的,你可以这样做:

x.Trim(new char[] { '\n', '\t', ' ', ',' });

因为换行技术上是一个字符,所以可以将它添加到数组中,避免两次调用Trim

编辑

.NET 4.0使用此方法来确定字符是否被视为空格。 早期版本维护一个空白字符的内部列表( Source )。

如果您真的只想使用一个Trim调用,那么您的应用程序可以执行以下操作:

  1. 在启动时,扫描Unicode空白字符的范围,在每个字符上调用Char.IsWhiteSpace
  2. 如果方法调用返回true,则将字符推送到数组。
  3. 将自定义字符添加到数组中

现在,您可以通过传递您构造的数组来使用单个Trim调用。

我猜Char.IsWhiteSpace依赖于当前的语言环境,所以你必须要特别注意语言环境。

使用正则表达式使这很简单:

text = Regex.Replace(text, @"^[\s,]+|[\s,]+$", "");

这也将匹配Unicode空白字符。

您可以使用以下Strip Extension方法

public static class ExtensionMethod
{
    public static string Strip(this string str, char[] otherCharactersToRemove)
    {
        List<char> charactersToRemove = (from s in str
                              where char.IsWhiteSpace(s)
                              select s).ToList();
        charactersToRemove.AddRange(otherCharactersToRemove);
        string str2 = str.Trim(charactersToRemove.ToArray());
        return str2;
    }
}

然后你可以这样称呼:

static void Main(string[] args)
        {
            string str = "abc\n\t\r\n ,  asdfadf , \n \r \t";
            string str2 = str.Strip(new char[]{','});
        }

出局将是:

str2 = "abc\n\t\r\n ,  asdfadf"

Strip Extension方法将首先从列表中的字符串中获取所有WhiteSpace字符。 在列表中添加要删除的其他字符,然后在其上调用trim。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM