Oto co mam:
private static int countNumChars(String s) {
for(char c : s.toCharArray()){
if (Equals(c," "))
}
}
Ale ten kod mówi, że nie może znaleźć symbolu dla tej metody. Pamiętam, że Java miała taką porównywarkę ... Jakieś sugestie?
java
char
whitespace
Jonik
źródło
źródło
' '
bez treści?Odpowiedzi:
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 tochar
stała (' '
).źródło
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:
Jeśli masz na myśli dowolny z tradycyjnych białych znaków ASCII (SP, HT, VT, CR, NL), to:
Jeśli masz na myśli dowolny biały znak Unicode, to:
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ś:
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
iString
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:
Innymi słowy, nazwa metody to
compare
(nieEquals
), 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:
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ściString
ichar
.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 przypadkuString
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.źródło
Możesz użyć
lub dowolna z innych dostępnych metod w klasie Character.
również działa.
źródło
Ponieważ
char
jest to typ prymitywny, możesz po prostu pisaćc == ' '
.Wystarczy wywołać
equals()
typy referencyjne, takie jakString
lubCharacter
.źródło
Moja sugestia byłaby taka:
źródło
Aby porównać znak, użyj
==
operatora:źródło
Character.isSpaceChar(c) || Character.isWhitespace(c)
pracował dla mnie.źródło
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.źródło
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:
Ale z drugiej strony, nie znam tej
"Equal"
klasyźródło
Możesz spróbować:
Lub:
źródło
Aby porównać
Strings
, musisz użyć słowa kluczowego equals .źródło
equals
Javie nie ma słowa kluczowego. To jest identyfikator. 3) Ponieważc
jestchar
(typ prymitywny !!), nie możesz zadzwonićc.equals(...)
. 4) Nawet gdybyś mógł, nie machar
wartości, na którą jest mapowana""
. To ostatnie oznacza łańcuch bez „znaków”. To nie może pasować do postaci.