5

快速的小问题...

我需要计算字符串的长度,但其中没有空格。例如,对于像“I am Bob”这样的字符串,string.Length将返回 8(6 个字母 + 2 个空格)。

我需要一种方法或其他东西来给我长度(或数量)只是字母(在“我是鲍勃”的情况下为 6)

我试过以下

s.Replace (" ", "");
s.Replace (" ", null);
s.Replace (" ", string.empty);

尝试获得“IamBob”,我做到了,但它并没有解决我的问题,因为它仍然将“”视为一个字符。

有什么帮助吗?

4

7 回答 7

17

这将返回非空白字符的数量:

"I am Bob".Count(c => !Char.IsWhiteSpace(c));

演示

Char.IsWhiteSpace

空白字符是以下 Unicode 字符:

  • SpaceSeparator 类别的成员,包括字符 SPACE (U+0020)、OGHAM SPACE MARK (U+1680)、蒙古元音分隔符 (U+180E)、EN QUAD (U+2000)、EM QUAD (U+2001) , EN SPACE (U+2002), EM SPACE (U+2003), 3-PER-EM SPACE (U+2004), 4-PER-EM SPACE (U+2005), 6-PER-EM SPACE (U+ 2006), 图形空间 (U+2007), 标点空间 (U+2008), 细长空间 (U+2009), 头发空间 (U+200A), 窄无间断空间 (U+202F), 中等数学空间 ( U+205F) 和表意空间 (U+3000)。
  • LineSeparator 类别的成员,仅由 LINE SEPARATOR 字符 (U+2028) 组成。
  • ParagraphSeparator 类别的成员,仅由 PARAGRAPH SEPARATOR 字符 (U+2029) 组成。
  • 字符 CHARACTER TABULATION (U+0009), LINE FEED (U+000A), LINE TABULATION (U+000B), FORM FEED (U+000C), CARRIAGE RETURN (U+000D), NEXT LINE (U+0085),和无间断空间 (U+00A0)。
于 2013-05-17T12:14:29.670 回答
7

不,它没有。

string s = "I am Bob";
Console.WriteLine(s.Replace(" ", "").Length); // 6
Console.WriteLine(s.Replace(" ", null).Length); //6
Console.WriteLine(s.Replace(" ", string.Empty).Length); //6

这是一个DEMO.

但是什么是空白字符?

http://en.wikipedia.org/wiki/Whitespace_character

空白字符

于 2013-05-17T12:14:34.907 回答
4

您可能忘记重新分配Replace. 尝试这个:

string s = "I am bob";
Console.WriteLine(s.Length); // 8
s = s.Replace(" ", "");
Console.WriteLine(s.Length); // 6
于 2013-05-17T12:13:21.040 回答
1

一个非常简单的方法是编写一个扩展方法来做这件事——计算没有空格的字符。这是代码:

public static class MyExtension
{
    public static int CharCountWithoutSpaces(this string str)
    {
        string[] arr = str.Split(' ');
        string allChars = "";
        foreach (string s in arr)
        {
            allChars += s;
        }
        int length = allChars.Length;
        return length;
    }
}

要执行,只需调用字符串上的方法:

string yourString = "I am Bob";
        int count = yourString.CharCountWithoutSpaces();
        Console.WriteLine(count); //=6

或者,如果您不想包含句点或逗号,则可以按照您想要的方式拆分字符串:

string[] arr = str.Split('.');

或者:

string[] arr = str.Split(',');
于 2014-10-30T02:36:20.917 回答
0

您的问题可能与 Replace() 方法有关,该方法实际上并未更改字符串,而是返回替换的值;

string withSpaces = "I am Bob";
string withoutSpaces = withSpaces.Replace(" ","");
Console.WriteLine(withSpaces);
Console.WriteLine(withoutSpaces);
Console.WriteLine(withSpaces.Length);
Console.WriteLine(withoutSpaces.Length);

//output
//I am Bob
//IamBob
//8
//6
于 2013-05-17T12:20:48.660 回答
0

这是最快的方法:

var spaceCount = 0;
for (var i 0; i < @string.Lenght; i++)
{
    if (@string[i]==" ") spaceCount++;
}
var res = @string.Lenght-spaceCount;
于 2013-05-17T12:18:41.433 回答
0

您可以在字符串对象上使用Length和函数的组合。Count这是一个简单的例子。

    string sText = "This is great  text";
    int nSpaces = sText.Length - sText.Count(Char.IsWhiteSpace);

这将准确计算单个或多个(一致的)空格。

希望能帮助到你。

于 2017-05-17T22:57:23.607 回答