Bagaimana cara memeriksa apakah karakter sama dengan ruang kosong?

104

Inilah yang saya punya:

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

Tetapi kode itu mengatakan tidak dapat menemukan Simbol untuk metode itu. Saya ingat Java memiliki pembanding seperti ini ... Ada saran?

Jonik
sumber
2
ruang kosong - ' 'tanpa konten?
Andreas Dolk

Jawaban:

213
if (c == ' ')

charadalah tipe data primitif, sehingga dapat dibandingkan dengan ==.

Juga, dengan menggunakan tanda kutip ganda Anda membuat Stringkonstanta ( " "), sedangkan dengan tanda kutip tunggal itu adalah charkonstanta ( ' ').

Nikita Rybak
sumber
87

Kode yang Anda butuhkan tergantung pada apa yang Anda maksud dengan "ruang kosong".

  • Jika yang Anda maksud adalah karakter spasi ASCII / Latin-1 / Unicode (0x20) alias SP, maka:

    if (ch == ' ') {
        // ...
    }
  • Jika yang Anda maksud adalah salah satu karakter spasi putih ASCII tradisional (SP, HT, VT, CR, NL), maka:

    if (ch == ' ' || ch == '\t' || ch == '\r' || ch == '\n' || ch == '\x0b') {
        // ...
    }
  • Jika yang Anda maksud adalah karakter spasi kosong Unicode, maka:

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

Perhatikan bahwa ada spasi kosong Unicode yang menyertakan kode kontrol ASCII tambahan , dan beberapa karakter Unicode lainnya di bidang kode yang lebih tinggi; lihat javadoc untuk Character.isWhitespace(char).


Apa yang Anda tulis adalah ini:

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

Ini salah di beberapa tingkatan. Pertama, cara compiler Java mencoba menafsirkannya adalah sebagai panggilan ke metode dengan tanda tangan boolean Equals(char, String).

  • Ini salah karena tidak ada metode, seperti yang dilaporkan kompilator dalam pesan kesalahan.
  • Equalsbiasanya tidak akan menjadi nama metode. Konvensi Java adalah bahwa nama metode dimulai dengan huruf kecil.
  • Kode Anda (seperti yang tertulis) mencoba untuk membandingkan karakter dan String, tetapi chardan Stringtidak sebanding dan tidak dapat dilemparkan ke tipe dasar umum.

Ada yang namanya Comparator di Java, tetapi ini adalah antarmuka bukan metode, dan dideklarasikan seperti ini:

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

Dengan kata lain, nama metode adalah compare(bukan Equals), ia mengembalikan integer (bukan boolean), dan membandingkan dua nilai yang dapat dipromosikan ke tipe yang diberikan oleh parameter tipe.


Seseorang (dalam Jawaban yang dihapus!) Mengatakan mereka mencoba ini:

    if (c == " ")

Itu gagal karena dua alasan:

  • " "adalah literal String dan bukan literal karakter, dan Java tidak mengizinkan perbandingan langsung Stringdan charnilai.

  • Anda TIDAK PERNAH membandingkan literal String atau String menggunakan ==. The ==operator pada tipe referensi membandingkan identitas obyek, bukan nilai objek. Dalam hal Stringini adalah umum untuk memiliki objek yang berbeda dengan identitas yang berbeda dan nilai yang sama. Sebuah ==tes akan sering memberikan jawaban yang salah ... dari perspektif apa yang Anda coba lakukan di sini.

Stephen C
sumber
20

Anda bisa menggunakan

Character.isWhitespace(c)

atau salah satu metode lain yang tersedia di kelas Karakter.

  if (c == ' ')

juga bekerja.

Corv1nus
sumber
Yah, itu pada akhirnya tergantung pada apakah dia hanya memeriksa spasi. Maksud saya jika itu berisi tab, Anda akan mendapatkan positif palsu.
Diperbarui. Dia bisa melakukan apa yang dia butuhkan langsung dari Karakter, meskipun itu berlebihan.
Corv1nus
18

Karena charmerupakan tipe primitif, Anda tinggal menulis c == ' '.
Anda hanya perlu memanggil equals()jenis referensi seperti Stringatau Character.

SLaks
sumber
12

Saran saya adalah:

if (c == ' ')
MartinStettner
sumber
11

Untuk membandingkan karakter Anda menggunakan ==operator:

if (c == ' ')
codaddict
sumber
5

Character.isSpaceChar(c) || Character.isWhitespace(c) bekerja untuk saya.

vbevans94
sumber
4

Dalam kasus ini, Anda memikirkan fungsi Perbandingan string "String".equals("some_text"). Karakter tidak perlu menggunakan fungsi ini. Sebaliknya ==operator perbandingan standar sudah cukup.

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

sumber
3

Sekilas, kode Anda tidak akan dikompilasi. Karena pernyataan if bersarang tidak memiliki kurung kurawal, itu akan mempertimbangkan baris berikutnya kode yang harus dieksekusi. Selain itu, Anda membandingkan karakter dengan String, "". Coba bandingkan nilai sebagai karakter sebagai gantinya. Saya pikir sintaks yang benar adalah:

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

Tapi sekali lagi, saya tidak terbiasa dengan "Equal"kelas

bakoyaro
sumber
3

Anda dapat mencoba:

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

Atau:

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

Untuk membandingkan StringsAnda harus menggunakan kata kunci sama dengan .

if(c.equals(""))
{
}
Adnan B.
sumber
1) Pertanyaan ini tentang membandingkan karakter, bukan string. 2) Tidak ada equalskata kunci di Jawa. Ini adalah pengenal. 3) Karena cadalah char(tipe primitif !!), Anda tidak dapat menelepon c.equals(...). 4) Bahkan jika Anda bisa, tidak ada charnilai yang dipetakan "". Yang terakhir berarti String dengan "tidak ada karakter di dalamnya". Itu tidak bisa cocok dengan satu karakter.
Stephen C
Kunci untuk menjawab pertanyaan ini muncul dengan arti "ruang kosong" yang masuk akal dalam konteksnya.
Stephen C