web-dev-qa-db-ja.com

文字が空のスペースと等しいかどうかを調べる方法は?

これが私が持っているものです:

private static int countNumChars(String s) {
    for(char c : s.toCharArray()){
        if (Equals(c," "))
    }
}

しかし、そのコードはそのメソッドのSymbolが見つからないと言っています。 Javaがこのような比較子を持っていたのを覚えていますか。

91
delete
if (c == ' ')

charはプリミティブデータ型なので、==と比較できます。

また、二重引用符を使用してString定数(" ")を作成し、一重引用符ではchar定数(' ')を作成します。

195
Nikita Rybak

あなたが必要とするコードはあなたが「空のスペース」によって何を意味するかに依存します。

  • ASCII/Latin-1/Unicodeの空白文字(0x20)、つまりSPを意味する場合は、次のようにします。

    if (ch == ' ') {
        // ...
    }
    
  • 従来のASCII空白文字(SP、HT、VT、CR、NL)を意味する場合は、次のようにします。

    if (ch == ' ' || ch == '\t' || ch == '\r' || ch == '\n' || ch == '\x0b') {
        // ...
    }
    
  • Unicodeの空白文字を意味するならば、

    if (Character.isWhitespace(ch)) {
        // ...
    }
    

Unicodeの空白文字には追加のASCII制御コード、、およびより上位のコードプレーン内の他のUnicode文字が含まれていることに注意してください。 Character.isWhitespace(char) のJavadocを参照してください。


あなたが書いたのはこれです:

    if (Equals(ch, " ")) {
        // ...
    }

これはいくつかのレベルで間違っています。まず、Javaコンパイラがそれを解釈しようとする方法は、boolean Equals(char, String)というシグネチャを持つメソッドの呼び出しとしてです。

  • コンパイラがエラーメッセージで報告したように、メソッドが存在しないため、これは間違っています。
  • とにかくEqualsは通常メソッドの名前ではありません。 Javaの規約では、メソッド名は小文字で始まります。
  • あなたのコードは(書かれているように)文字と文字列を比較しようとしていましたが、charStringは比較できず、共通の基本型にキャストすることはできません。

JavaにはComparatorのようなものがありますが、それはメソッドではなくインターフェースです、そしてそれはこのように宣言されます:

    public interface Comparator<T> {
        public int compare(T v1, T v2);
    }

つまり、メソッド名はcompareEqualsではなく)であり、整数(ブール値ではない)を返し、typeパラメーターで指定された型にプロモートできる2つの値を比較します。


誰かが(削除された回答で)彼らはこれを試してみました:

    if (c == " ")

それは2つの理由で失敗します。

  • " "は文字列リテラルであり、文字リテラルではありません。また、JavaではStringcharの値を直接比較することはできません。

  • ==を使って文字列や文字列リテラルを比較しないでください。参照型の==演算子は、オブジェクトの値ではなく、オブジェクトの識別情報を比較します。 Stringの場合、異なるアイデンティティと同じ値を持つ異なるオブジェクトを持つのが一般的です。 ==テストは間違った答えを与えることがよくあります...ここでやろうとしていることの観点から。

84
Stephen C

あなたが使用することができます

Character.isWhitespace(c)

またはCharacterクラスの他の利用可能なメソッド。

  if (c == ' ')

また働きます。

20
Corv1nus

charはプリミティブ型なので、c == ' 'と書くだけです。
StringCharacterのような参照型に対してはequals()を呼び出すだけです。

19
SLaks

私の提案は、

if (c == ' ')
12
MartinStettner

文字を比較するには==演算子を使います。

if (c == ' ')
11
codaddict

Character.isSpaceChar(c) || Character.isWhitespace(c)は私のために働きました。

3
vbevans94

この場合、あなたは文字列比較関数"String".equals("some_text")を考えています。文字はこの関数を使用する必要はありません。代わりに、標準の==比較演算子で十分です。

private static int countNumChars(String s) {
    for(char c : s.toCharArray()){
        if (c == ' ') // your resulting outcome
    }
}
3
Glenn Nelson

一見すると、あなたのコードはコンパイルされません。入れ子になったif文には中括弧がないので、次の行を実行するコードと見なします。また、charとString ""を比較しています。代わりに文字として値を比較してみてください。正しい構文は次のようになると思います。

if(c == ' '){
   //do something here
}

しかし、"Equal"クラスには慣れていません

3
bakoyaro

あなたが試すことができます:

if(Character.isSpaceChar(ch))
{
    // Do something...
}

または

if((int) ch) == 32)
{
    // Do something...
}
2
A-Sharabiani