Ответ 1
if (c == ' ')
char
- это примитивный тип данных, поэтому его можно сравнить с ==
.
Кроме того, используя двойные кавычки, вы создаете константу String
(" "
), а с одинарными кавычками - константу char
(' '
).
Вот что у меня есть:
private static int countNumChars(String s) {
for(char c : s.toCharArray()){
if (Equals(c," "))
}
}
Но этот код говорит, что он не может найти Symbol для этого метода. Я помню, что Java имеет такой компаратор... Любые предложения?
if (c == ' ')
char
- это примитивный тип данных, поэтому его можно сравнить с ==
.
Кроме того, используя двойные кавычки, вы создаете константу String
(" "
), а с одинарными кавычками - константу char
(' '
).
Код, который вам нужен, зависит от того, что вы подразумеваете под "пустым пространством".
Если вы имеете в виду пробел ASCII/Latin-1/Unicode (0x20) aka 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
(not Equals
), оно возвращает целое число (не логическое) и сравнивает два значения, которые могут быть повышены до типа, заданного параметром типа.
Кто-то (в удаленном ответе!) сказал, что они пробовали это:
if (c == " ")
Это не удается по двум причинам:
" "
является строковым литералом, а не символьным литералом, а Java не допускает прямого сравнения значений String
и char
.
НИКОГДА не следует сравнивать строковые или строковые литералы с помощью ==
. Оператор ==
в ссылочном типе сравнивает идентификатор объекта, а не значение объекта. В случае String
обычно имеют разные объекты с разной идентичностью и одинаковыми значениями. Тест ==
будет часто давать неверный ответ... с точки зрения того, что вы пытаетесь сделать здесь.
Так как char
является примитивным типом, вы можете просто написать c == ' '
.
Вам нужно только вызвать equals()
для ссылочных типов, таких как String
или Character
.
Вы можете использовать
Character.isWhitespace(c)
или любой другой доступный метод в классе Character.
if (c == ' ')
также работает.
Мое предложение было бы:
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 не имеет фигурных скобок, он рассмотрит следующую строку кода, который он должен выполнить. Кроме того, вы сравниваете char с строкой, "". Попробуйте сравнить значения как символы вместо. Я думаю, что правильный синтаксис был бы следующим:
if(c == ' '){
//do something here
}
Но опять же, я не знаком с классом "Equal"
Вы можете попробовать:
if(Character.isSpaceChar(ch))
{
// Do something...
}
Или:
if((int) ch) == 32)
{
// Do something...
}
Character.isSpaceChar(c) || Character.isWhitespace(c)
работал у меня.
Чтобы сравнить Strings
, вы должны использовать ключевое слово equals.
if(c.equals(""))
{
}