Yanıtlar:
if (c == ' ')
char
ilkel bir veri türüdür, dolayısıyla karşılaştırılabilir ==
.
Ayrıca, çift tırnak kullanarak String
sabit ( " "
) oluştururken, tek tırnaklarla char
sabit ( ' '
) olur.
İ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)
.
Equals
normalde bir yöntemin adı olmazdı. Java kuralı, yöntem adlarının küçük harfle başlamasıdır.char
ve String
karşı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 String
ve char
değ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, String
farklı 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 .
Kullanabilirsin
Character.isWhitespace(c)
veya Character sınıfındaki diğer kullanılabilir yöntemlerden herhangi biri.
if (c == ' ')
ayrıca çalışır.
Benim önerim şudur:
if (c == ' ')
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
}
}
İ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
Deneyebilirsin:
if(Character.isSpaceChar(ch))
{
// Do something...
}
Veya:
if((int) ch) == 32)
{
// Do something...
}
Karşılaştırmak Strings
için eşittir anahtar kelimesini kullanmanız gerekir .
if(c.equals(""))
{
}
equals
Java'da anahtar kelime yok . Bu bir tanımlayıcıdır. 3) c
Bir char
(ilkel tip !!) olduğu için arayamazsınız c.equals(...)
. 4) Yapabilseniz bile, eşleşecek bir char
değer yoktur ""
. İkincisi, "içinde karakter olmayan" bir Dize anlamına gelir. Bu bir karakterle eşleşemez.
' '
içeriği olmayan bir?