Odpowiedzi:
if (c == ' ')
char
jest prymitywnym typem danych, więc można go porównać z ==
.
Ponadto, używając podwójnych cudzysłowów tworzysz String
stałą ( " "
), podczas gdy w przypadku apostrofów jest to char
stała ( ' '
).
Kod, którego potrzebujesz, zależy od tego, co masz na myśli mówiąc „puste miejsce”.
Jeśli masz na myśli znak spacji ASCII / Latin-1 / Unicode (0x20) aka SP, to:
if (ch == ' ') {
// ...
}
Jeśli masz na myśli dowolny z tradycyjnych białych znaków ASCII (SP, HT, VT, CR, NL), to:
if (ch == ' ' || ch == '\t' || ch == '\r' || ch == '\n' || ch == '\x0b') {
// ...
}
Jeśli masz na myśli dowolny biały znak Unicode, to:
if (Character.isWhitespace(ch)) {
// ...
}
Zauważ, że istnieją białe znaki Unicode zawierające dodatkowe kody sterujące ASCII i kilka innych znaków Unicode w wyższych płaszczyznach kodu; zobacz javadoc dla Character.isWhitespace(char)
.
Oto co napisałeś:
if (Equals(ch, " ")) {
// ...
}
Jest to błędne na wielu poziomach. Po pierwsze, sposób, w jaki kompilator języka Java próbuje to zinterpretować, jest wywołaniem metody z sygnaturą boolean Equals(char, String)
.
Equals
i tak normalnie nie byłaby nazwą metody. Konwencja języka Java jest taka, że nazwy metod zaczynają się od małej litery.char
i String
nie są porównywalne i nie mogą być oddane do wspólnego typu bazowego.W Javie istnieje coś takiego jak komparator, ale jest to interfejs, a nie metoda, i jest zadeklarowany w ten sposób:
public interface Comparator<T> {
public int compare(T v1, T v2);
}
Innymi słowy, nazwa metody to compare
(nie Equals
), zwraca liczbę całkowitą (nie wartość logiczną) i porównuje dwie wartości, które można podwyższyć do typu podanego przez parametr type.
Ktoś (w usuniętej odpowiedzi!) Powiedział, że spróbował tego:
if (c == " ")
To się nie udaje z dwóch powodów:
" "
jest literałem typu String, a nie literałem znakowym, a Java nie zezwala na bezpośrednie porównywanie wartości String
i char
.
NIGDY nie należy porównywać ciągów znaków ani literałów ciągów przy użyciu ==
. ==
Operator od rodzaju odniesienia porównuje tożsamość obiektu, a nie wartość obiektu. W tym przypadku String
często mamy różne przedmioty o różnej tożsamości i tej samej wartości. ==
Test często dają złą odpowiedź ... z punktu widzenia tego, co staramy się robić tutaj.
Możesz użyć
Character.isWhitespace(c)
lub dowolna z innych dostępnych metod w klasie Character.
if (c == ' ')
również działa.
Moja sugestia byłaby taka:
if (c == ' ')
W tym przypadku myślisz o funkcji porównującej String "String".equals("some_text")
. Znaki nie muszą korzystać z tej funkcji. Zamiast tego wystarczy standardowy ==
operator porównania.
private static int countNumChars(String s) {
for(char c : s.toCharArray()){
if (c == ' ') // your resulting outcome
}
}
Na pierwszy rzut oka Twój kod się nie kompiluje. Ponieważ zagnieżdżona instrukcja if nie ma żadnych nawiasów klamrowych, weźmie pod uwagę następny wiersz kodu, który powinien wykonać. Porównujesz również znak ze stringiem, „”. Zamiast tego spróbuj porównać wartości jako znaki. Myślę, że poprawna składnia to:
if(c == ' '){
//do something here
}
Ale z drugiej strony, nie znam tej "Equal"
klasy
Możesz spróbować:
if(Character.isSpaceChar(ch))
{
// Do something...
}
Lub:
if((int) ch) == 32)
{
// Do something...
}
Aby porównać Strings
, musisz użyć słowa kluczowego equals .
if(c.equals(""))
{
}
equals
Javie nie ma słowa kluczowego. To jest identyfikator. 3) Ponieważ c
jest char
(typ prymitywny !!), nie możesz zadzwonić c.equals(...)
. 4) Nawet gdybyś mógł, nie ma char
wartości, na którą jest mapowana ""
. To ostatnie oznacza łańcuch bez „znaków”. To nie może pasować do postaci.
' '
bez treści?