没有空格的字符串长度(C#)

时间:2013-05-17 12:10:55

标签: c# string spaces

快速的小问题......

我需要计算字符串的长度,但不包含其中的空格。 例如。对于像“我是鲍勃”这样的字符串,string.Length将返回8(6个字母+2个空格)。

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

我试过以下

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

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

任何帮助?

7 个答案:

答案 0 :(得分:16)

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

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

Demo

Char.IsWhiteSpace

空格字符是以下Unicode字符:

  • SpaceSeparator类别的成员,包括字符SPACE(U + 0020),OGHAM SPACE MARK(U + 1680),MONGOLIAN VOWEL SEPARATOR(U + 180E),EN QUAD(U + 2000),EM QUAD(U +2001),EN SPACE(U + 2002),EM SPACE(U + 2003),三个空间(U + 2004),四个空间(U + 2005),六个每个EM空间(U + 2006),图形空间(U + 2007),PUNCTUATION SPACE(U + 2008),薄空间(U + 2009),头发空间(U + 200A),NARROW NO-BREAK SPACE(U + 202F),MEDIUM数学空间(U + 205F)和IDEOGRAPHIC SPACE(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)和NO-BREAK SPACE(U + 00A0)。

答案 1 :(得分:6)

否。它没有。

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

whitespace characters

答案 2 :(得分:4)

您可能忘记重新分配Replace的结果。试试这个:

string s = "I am bob";
Console.WriteLine(s.Length); // 8
s = s.Replace(" ", "");
Console.WriteLine(s.Length); // 6

答案 3 :(得分: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(',');

答案 4 :(得分:0)

这是最快的方法:

var spaceCount = 0;
for (var i 0; i < @string.Lenght; i++)
{
    if (@string[i]==" ") spaceCount++;
}
var res = @string.Lenght-spaceCount;

答案 5 :(得分: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

答案 6 :(得分:0)

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

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

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

希望它有所帮助。