Ответы:
if (c == ' ')
char
является примитивным типом данных, поэтому его можно сравнить с ==
.
Кроме того, используя двойные кавычки, вы создаете String
constant ( " "
), а с одинарными кавычками - char
constant ( ' '
).
Код, который вам нужен, зависит от того, что вы подразумеваете под «пустым пространством».
Если вы имеете в виду пробел ASCII / Latin-1 / Unicode (0x20), он же SP, то:
if (ch == ' ') {
// ...
}
Если вы имеете в виду любой из традиционных символов пробела ASCII (SP, HT, VT, CR, NL), то:
if (ch == ' ' || ch == '\t' || ch == '\r' || ch == '\n' || ch == '\x0b') {
// ...
}
Если вы имеете в виду любой пробельный символ Unicode, то:
if (Character.isWhitespace(ch)) {
// ...
}
Обратите внимание, что пробелы Unicode включают дополнительные управляющие коды ASCII и некоторые другие символы Unicode в более высоких плоскостях кода; см. javadoc для Character.isWhitespace(char)
.
Вы написали следующее:
if (Equals(ch, " ")) {
// ...
}
Это неверно на нескольких уровнях. Во-первых, компилятор Java пытается интерпретировать это как вызов метода с сигнатурой boolean Equals(char, String)
.
Equals
в любом случае обычно не будет именем метода. По соглашению Java имена методов начинаются с строчной буквы.char
и String
не сопоставимы и не могут быть приведены к общему базовому типу.В Java есть компаратор, но это интерфейс, а не метод, и он объявлен так:
public interface Comparator<T> {
public int compare(T v1, T v2);
}
Другими словами, имя метода compare
(не Equals
), он возвращает целое число (не логическое) и сравнивает два значения, которые могут быть повышены до типа, заданного параметром типа.
Кто-то (в удаленном ответе!) Сказал, что пробовал это:
if (c == " ")
Это не удается по двум причинам:
" "
является буквальной строка и не литера, и Java не позволяет напрямую сравнивать String
и char
значение.
НИКОГДА не сравнивайте строки или строковые литералы, используя ==
. ==
Оператор ссылочного типа сравнивает идентификатор объекта, а не значение объекта. В случае String
с разными объектами с разной идентичностью и одинаковым значением, как правило, используются разные объекты. ==
Тест часто дает неправильный ответ ... с точки зрения того , что вы пытаетесь сделать здесь.
Вы могли бы использовать
Character.isWhitespace(c)
или любой из других доступных методов в классе Character.
if (c == ' ')
тоже работает.
Мое предложение было бы:
if (c == ' ')
В этом случае вы думаете о функции сравнения строк "String".equals("some_text")
. Символам не нужно использовать эту функцию. Вместо этого ==
будет достаточно стандартного оператора сравнения.
private static int countNumChars(String s) {
for(char c : s.toCharArray()){
if (c == ' ') // your resulting outcome
}
}
На первый взгляд, ваш код не компилируется. Поскольку вложенный оператор if не имеет фигурных скобок, он будет рассматривать следующую строку как код, который должен выполнить. Кроме того, вы сравниваете символ со строкой "". Вместо этого попробуйте сравнить значения как символы. Я думаю, что правильный синтаксис будет:
if(c == ' '){
//do something here
}
Но опять же, я не знаком с "Equal"
классом
Можешь попробовать:
if(Character.isSpaceChar(ch))
{
// Do something...
}
Или:
if((int) ch) == 32)
{
// Do something...
}
Для сравнения Strings
вы должны использовать ключевое слово equals .
if(c.equals(""))
{
}
equals
Java нет ключевого слова. Это идентификатор. 3) Поскольку c
это char
(примитивный тип !!), вы не можете позвонить c.equals(...)
. 4) Даже если бы вы могли, нет никакого char
значения, которому соответствовали бы ""
. Последнее означает строку, в которой «нет символов». Это не может соответствовать персонажу.
' '
без содержания?