Как проверить, равен ли char пустое пространство?

Вот что у меня есть:

private static int countNumChars(String s) {
    for(char c : s.toCharArray()){
        if (Equals(c," "))
    }
}

Но этот код говорит, что он не может найти Symbol для этого метода. Я помню, что Java имеет такой компаратор... Любые предложения?

Ответ 1

if (c == ' ')

char - это примитивный тип данных, поэтому его можно сравнить с ==.

Кроме того, используя двойные кавычки, вы создаете константу String (" "), а с одинарными кавычками - константу char (' ').

Ответ 2

Код, который вам нужен, зависит от того, что вы подразумеваете под "пустым пространством".

  • Если вы имеете в виду пробел 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 обычно имеют разные объекты с разной идентичностью и одинаковыми значениями. Тест == будет часто давать неверный ответ... с точки зрения того, что вы пытаетесь сделать здесь.

Ответ 3

Так как char является примитивным типом, вы можете просто написать c == ' '.
Вам нужно только вызвать equals() для ссылочных типов, таких как String или Character.

Ответ 4

Вы можете использовать

Character.isWhitespace(c)

или любой другой доступный метод в классе Character.

  if (c == ' ')

также работает.

Ответ 5

Мое предложение было бы:

if (c == ' ')

Ответ 6

Для сравнения символа используется оператор ==:

if (c == ' ')

Ответ 7

В этом случае вы думаете о функции сравнения строк "String".equals("some_text"). Символы не должны использовать эту функцию. Вместо этого достаточно стандартного оператора сравнения ==.

private static int countNumChars(String s) {
    for(char c : s.toCharArray()){
        if (c == ' ') // your resulting outcome
    }
}

Ответ 8

На первый взгляд ваш код не будет компилироваться. Поскольку вложенный оператор if не имеет фигурных скобок, он рассмотрит следующую строку кода, который он должен выполнить. Кроме того, вы сравниваете char с строкой, "". Попробуйте сравнить значения как символы вместо. Я думаю, что правильный синтаксис был бы следующим:

if(c == ' '){
   //do something here
}

Но опять же, я не знаком с классом "Equal"

Ответ 9

Вы можете попробовать:

if(Character.isSpaceChar(ch))
{
    // Do something...
}

Или:

if((int) ch) == 32)
{
    // Do something...
}

Ответ 10

Character.isSpaceChar(c) || Character.isWhitespace(c) работал у меня.

Ответ 11

Чтобы сравнить Strings, вы должны использовать ключевое слово equals.

if(c.equals(""))
{
}