5

簡単な質問...

文字列の長さを数える必要がありますが、その中にスペースはありません。たとえば、「I am Bob」のような文字列の場合、string.Length8 (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 文字です。

  • 文字 SPACE (U+0020)、OGHAM SPACE MARK (U+1680)、MONGOLIAN VOWEL SEPARATOR (U+180E)、EN QUAD (U+2000)、EM QUAD (U+2001) を含む SpaceSeparator カテゴリのメンバー、EN SPACE (U+2002)、EM SPACE (U+2003)、THREE-PER-EM SPACE (U+2004)、FOUR-PER-EM SPACE (U+2005)、SIX-PER-EM SPACE (U+ 2006)、FIGURE SPACE (U+2007)、PUNCTUATION SPACE (U+2008)、THIN SPACE (U+2009)、HAIR SPACE (U+200A)、NARROW NO-BREAK SPACE (U+202F)、MEDIUM MATHEMATICAL SPACE ( U+205F)、IDEOGRAPHIC SPACE (U+3000)。
  • LINE SEPARATOR 文字 (U+2028) のみで構成される LineSeparator カテゴリのメンバー。
  • PARAGRAPH SEPARATOR 文字 (U+2029) のみで構成される ParagraphSeparator カテゴリのメンバー。
  • 文字 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)。
于 2013-05-17T12:14:29.670 に答える
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

Length文字列オブジェクトに対してとCount関数を組み合わせて使用​​できます。簡単な例を次に示します。

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

これにより、単一または複数の (一貫した) スペースが正確にカウントされます。

それが役に立てば幸い。

于 2017-05-17T22:57:23.607 に答える