4

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

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

正确输出abc。我可以很容易地将它包装在一个扩展方法中,但我想知道是否有一种内置的方法可以通过对Trim()我缺少的单个调用来执行此操作。我习惯了 Python,我可以这样做:

import string
x = "abc,\n"

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

该文档指出,除了少数例外,所有Unicode 空白字符都被剥离(请参阅对调用者的注释部分),但我想知道是否有一种方法可以做到这一点,而无需在扩展方法中手动定义字符数组。

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

4

3 回答 3

5

是的,你可以这样做:

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

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

编辑

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

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

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

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

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

于 2012-07-31T22:20:24.750 回答
4

使用正则表达式使这变得简单:

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

这也将匹配 Unicode 空白字符。

于 2012-07-31T22:40:13.747 回答
1

您可以使用以下条扩展方法

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。

于 2012-07-31T22:32:59.887 回答