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

时间:2012-07-31 22:18:06

标签: c# whitespace trim

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

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

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

import string
x = "abc,\n"

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

The documentation声明所有Unicode whitespace characters,除了少数例外情况,都会被删除(请参阅来自来电者的说明部分),但我想知道是否有办法如果不在扩展方法中手动定义字符数组,请执行此操作。

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

3 个答案:

答案 0 :(得分:4)

是的,你可以这样做:

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

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

修改

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

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

  1. 启动时,扫描the range of Unicode whitespace characters,在每个角色上调用Char.IsWhiteSpace
  2. 如果方法调用返回true,则将字符推送到数组上。
  3. 同样将自定义字符添加到数组
  4. 现在,您可以通过传递您构建的数组来使用单个Trim调用。

    我猜测Char.IsWhiteSpace取决于当前的区域设置,因此您必须特别注意区域设置。

答案 1 :(得分:4)

使用正则表达式可以很简单:

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

这也将匹配Unicode空格字符。

答案 2 :(得分:1)

您可以使用以下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。