Bir karakterin boş bir alana eşit olup olmadığı nasıl kontrol edilir?


104

İşte sahip olduğum şey:

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

Ancak bu kod, bu yöntem için Sembol bulamadığını söylüyor. Java'nın böyle bir karşılaştırıcısı olduğunu hatırlıyorum ... Herhangi bir öneriniz var mı?


2
boş alan - ' 'içeriği olmayan bir?
Andreas Dolk

Yanıtlar:


213
if (c == ' ')

charilkel bir veri türüdür, dolayısıyla karşılaştırılabilir ==.

Ayrıca, çift tırnak kullanarak Stringsabit ( " ") oluştururken, tek tırnaklarla charsabit ( ' ') olur.


88

İhtiyaç duyduğunuz kod, "boş alan" ile ne demek istediğinize bağlıdır.

  • ASCII / Latin-1 / Unicode boşluk karakterini (0x20), yani SP'yi kastediyorsanız:

    if (ch == ' ') {
        // ...
    }
    
  • Geleneksel ASCII boşluk karakterlerinden herhangi birini kastediyorsanız (SP, HT, VT, CR, NL), o zaman:

    if (ch == ' ' || ch == '\t' || ch == '\r' || ch == '\n' || ch == '\x0b') {
        // ...
    }
    
  • Herhangi bir Unicode boşluk karakterini kastediyorsanız, o zaman:

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

Unicode boşluklarının ek ASCII kontrol kodları ve daha yüksek kod düzlemlerinde diğer bazı Unicode karakterleri içerdiğini unutmayın ; için javadoc'a bakın Character.isWhitespace(char).


Yazdıklarınız şuydu:

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

Bu, birçok düzeyde yanlıştır. Birincisi, Java derleyicisinin bunu yorumlama yöntemi, imzası olan bir yönteme çağrı gibidir boolean Equals(char, String).

  • Derleyici hata mesajında ​​bildirdiğinden, bu yanlıştır çünkü hiçbir yöntem yoktur.
  • Equalsnormalde bir yöntemin adı olmazdı. Java kuralı, yöntem adlarının küçük harfle başlamasıdır.
  • Kodunuz (yazılı olarak) bir karakter ve bir Dize karşılaştırmaya çalışıyor, fakat charve Stringkarşılaştırılabilir değildir ve ortak bir taban türüne döküm edilemez.

Java'da Karşılaştırıcı diye bir şey var ama bu bir yöntem değil bir arayüzdür ve şu şekilde bildirilir:

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

Başka bir deyişle, yöntem adı compare(değil Equals), bir tamsayı (boole değil ) döndürür ve tür parametresi tarafından verilen türe yükseltilebilecek iki değeri karşılaştırır.


Birisi (silinmiş bir Cevapta!) Bunu denediğini söyledi:

    if (c == " ")

Bu iki nedenden dolayı başarısız olur:

  • " "String değişmezi değil, bir karakterin yazı ve Java direkt karşılaştırmasını izin vermez Stringve chardeğerler.

  • Kullanarak Dizeleri veya Dize değişmezlerini ASLA karşılaştırmamalısınız ==. ==Referans tip operatör nesnenin kimliğini değil nesne değeri karşılaştırır. Bu durumda, Stringfarklı kimliğe ve aynı değere sahip farklı nesnelere sahip olmak yaygındır. Burada yapmaya çalıştığınız şey açısından ... bir ==test genellikle yanlış cevap verecektir .


20

Kullanabilirsin

Character.isWhitespace(c)

veya Character sınıfındaki diğer kullanılabilir yöntemlerden herhangi biri.

  if (c == ' ')

ayrıca çalışır.


Sonuçta, sadece boşlukları kontrol edip etmediğine bağlı. Demek istediğim, bir sekme içeriyorsa, yanlış bir pozitif alırsınız.

Güncellenmiş. Aşırı olmasına rağmen ihtiyacı olanı doğrudan Karakter'den yapabilir.
Corv1nus

18

Yana charilkel türüdür, sadece yazabilirsiniz c == ' '.
Sadece veya equals()gibi referans türlerini aramanız gerekir .StringCharacter



11

Karakteri karşılaştırmak için ==operatörü kullanırsınız :

if (c == ' ')

5

Character.isSpaceChar(c) || Character.isWhitespace(c) benim için çalıştı.


4

Bu durumda, String karşılaştırma işlevini düşünüyorsunuz "String".equals("some_text"). Karakterlerin bu işlevi kullanmasına gerek yoktur. Bunun yerine standart bir ==karşılaştırma operatörü yeterli olacaktır.

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

3

İlk bakışta kodunuz derlenmeyecektir. İç içe geçmiş if ifadesinde küme ayraçları olmadığından, sonraki satırı yürütmesi gereken kodu dikkate alır. Ayrıca, bir karakter ile "" karakterini karşılaştırıyorsunuz. Bunun yerine değerleri karakter olarak karşılaştırmayı deneyin. Doğru söz diziminin şöyle olacağını düşünüyorum:

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

Ama yine de, "Equal"sınıfa aşina değilim


3

Deneyebilirsin:

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

Veya:

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

-5

Karşılaştırmak Stringsiçin eşittir anahtar kelimesini kullanmanız gerekir .

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

1) Bu Soru dizeleri değil karakterleri karşılaştırmakla ilgilidir. 2) equalsJava'da anahtar kelime yok . Bu bir tanımlayıcıdır. 3) cBir char(ilkel tip !!) olduğu için arayamazsınız c.equals(...). 4) Yapabilseniz bile, eşleşecek bir chardeğer yoktur "". İkincisi, "içinde karakter olmayan" bir Dize anlamına gelir. Bu bir karakterle eşleşemez.
Stephen C

Bu soruyu cevaplamanın anahtarı, bağlamda bir tür anlam ifade eden "boş alan" için bir anlam bulmaktır.
Stephen C
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.