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

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

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

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

вопрос задан 22.12.2010
does_not_exist
репутация

11 ответов


  • 186 рейтинг
    if (c == ' ')
    

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

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

    ответ дан Nikita Rybak, с репутацией 55528, 22.12.2010
  • 81 рейтинг

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

    • Если вы имеете в виду символ пробела ASCII / Latin-1 / Unicode (0x20) или SP, то:

      if (ch == ' ') {
          // ...
      }
      
    • Если вы имеете в виду какие-либо традиционные пробельные символы ASCII (SP, HT, VT, CR, NL), то:

      if (ch == ' ' || ch == '\t' || ch == '\r' || ch == '\n' || ch == '\x0b') {
          // ...
      }
      
    • Если вы имеете в виду какой-либо символ пробела в Юникоде, то:

      if (Character.isWhitespace(ch)) {
          // ...
      }
      

    Обратите внимание, что существуют пробельные символы Unicode, включая , дополнительные управляющих кодов ASCII, и и некоторые другие символы Unicode в более высоких плоскостях кода; см. Javadoc для Character.isWhitespace(char) .


    То, что вы написали, было так:

        if (Equals(ch, " ")) {
            // ...
        }
    

    Это неправильно на нескольких уровнях. Во-первых, способ, которым компилятор Java пытается интерпретировать это как вызов метода с сигнатурой boolean Equals(char, String).

    • Это неправильно, потому что не существует метода, как компилятор сообщил в сообщении об ошибке.
    • Equals обычно не будет именем метода в любом случае. Соглашение Java заключается в том, что имена методов начинаются со строчной буквы.
    • Ваш код (как написано) пытался сравнить символ и строку, но char и String не сопоставимы и не могут быть преобразованы в общий базовый тип.

    В Java есть такая вещь, как Comparator, но это интерфейс, а не метод, и он объявлен так:

        public interface Comparator {
            public int compare(T v1, T v2);
        }
    

    Другими словами, имя метода - compare (не Equals), оно возвращает целое число (не логическое значение) и сравнивает два значения, которые можно повысить до типа, заданного параметром типа.


    Кто-то (в удаленном ответе! ) сказали, что попробовали это:

        if (c == " ")
    

    Это не по двум причинам:

    • " " является строковым литералом, а не символьным литералом, и Java не допускает прямого сравнения значений String и char.

    • Вы НИКОГДА не должны сравнивать строки или строковые литералы, используя ==. Оператор == для ссылочного типа сравнивает идентификатор объекта, а не значение объекта. В случае String обычно используются разные объекты с разной идентичностью и одинаковым значением. Тест == будет часто давать неправильный ответ . , , с точки зрения того, что вы пытаетесь сделать здесь.

    ответ дан Stephen C, с репутацией 499789, 22.12.2010
  • 19 рейтинг

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

    ответ дан SLaks, с репутацией 663126, 22.12.2010
  • 19 рейтинг

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

    Character.isWhitespace(c)
    

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

      if (c == ' ')
    

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

    ответ дан Corv1nus, с репутацией 3268, 22.12.2010
  • 12 рейтинг

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

    if (c == ' ')
    
    ответ дан MartinStettner, с репутацией 22338, 22.12.2010
  • 11 рейтинг

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

    if (c == ' ')
    
    ответ дан codaddict, с репутацией 337564, 22.12.2010
  • 3 рейтинг

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

    ответ дан vbevans94, с репутацией 542, 11.07.2016
  • 3 рейтинг

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

    private static int countNumChars(String s) {
        for(char c : s.toCharArray()){
            if (c == ' ') // your resulting outcome
        }
    }
    
    ответ дан Glenn Nelson, с репутацией 2977, 22.12.2010
  • 3 рейтинг

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

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

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

    ответ дан bakoyaro, с репутацией 2021, 22.12.2010
  • 2 рейтинг

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

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

    или

    if((int) ch) == 32)
    {
        // Do something...
    }
    
    ответ дан A-Sharabiani, с репутацией 5246, 28.06.2015
  • -3 рейтинг

    Для сравнения Strings необходимо использовать ключевое слово равно .

    if(c.equals(""))
    {
    }
    
    ответ дан Adnan B., с репутацией 9, 21.11.2013