文字が空のスペースと等しいかどうかを確認するにはどうすればよいですか?


104

ここに私が持っているものがあります:

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

しかし、そのコードは、そのメソッドのシンボルが見つからないことを示しています。Javaにこのような比較機能があることを覚えています...何か提案はありますか?


2
空のスペース - ' '内容のない?
Andreas Dolk 2010

回答:


213
if (c == ' ')

charはプリミティブデータ型であるため、と比較できます==

また、二重引用符を使用するとString定数(" ")が作成されますが、単一引用符ではchar定数(' ')になります。


87

必要なコードは、「空のスペース」の意味によって異なります。

  • 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)) {
        // ...
    }

含ま空白ユニコードがあることに注意してください追加の ASCII制御コード、およびより高いコード・プレーン内のいくつかの他のUnicode文字が、のjavadocを参照してくださいCharacter.isWhitespace(char)


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

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

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

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

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

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

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


誰かが(削除された回答で!)彼らはこれを試したと言いました:

    if (c == " ")

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

  • " "は文字リテラルであり、文字リテラルではありません。Javaでは、Stringおよびのchar値を直接比較することはできません。

  • を使用して文字列または文字列リテラルを比較しないでください====参照型の演算子は、オブジェクト値ではなくオブジェクトIDを比較します。以下の場合にはString、それ異なるIDと同じ値を持つ別のオブジェクトを持つことが一般的です。==テストはします、多くの場合、間違った答えを与えるあなたがここでやろうとしているものの視点から...。


20

あなたは使うことができます

Character.isWhitespace(c)

または、Characterクラスで使用可能なその他のメソッド。

  if (c == ' ')

も動作します。


まあそれは最終的に彼がスペースだけをチェックしているかどうかに依存します。つまり、タブが含まれていると、誤検知が発生します。

更新しました。やりすぎですが、キャラクターから直接必要なことを行えます。
Corv1nus 2010

18

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



11

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

if (c == ' ')

5

Character.isSpaceChar(c) || Character.isWhitespace(c) 私のために働いた。


4

この例では、ストリング比較関数について考えています"String".equals("some_text")。Charsはこの関数を使用する必要はありません。代わりに、標準の==比較演算子で十分です。

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

3

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

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

しかし、もう一度、私は"Equal"クラスに精通していません


3

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

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

または:

if((int) ch) == 32)
{
    // Do something...
}

-5

比較Stringsするには、equalsキーワードを使用する必要があります。

if(c.equals(""))
{
}

1)この質問は、文字列ではなく文字の比較に関するものです。2)equalsJavaにはキーワードはありません。識別子です。3)cchar(プリミティブ型!!)なので、は呼び出せませんc.equals(...)。4)可能であっても、にcharマップされる値はありません""。後者は、「文字が含まれていない」文字列を意味します。それは文字と一致することはできません。
スティーブンC

この質問に答えるための鍵は、文脈においてある意味をなす「空の空間」の意味を思いつくことです。
スティーブンC
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.