Как проверить, равен ли символ пустому пространству? - PullRequest
91 голосов
/ 22 декабря 2010

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

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

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

Ответы [ 11 ]

195 голосов
/ 22 декабря 2010
if (c == ' ')

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

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

84 голосов
/ 22 декабря 2010

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

  • Если вы имеете в виду символ пробела 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 управляющие коды, и некоторые другие символы Юникода в более высоких плоскостях кода;см. javadoc для Character.isWhitespace(char).


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

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

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

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

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

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

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


Кто-то (в удаленном ответе!) Сказал, что пытался это:

    if (c == " ")

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

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

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

20 голосов
/ 22 декабря 2010

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

Character.isWhitespace(c)

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

  if (c == ' ')

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

19 голосов
/ 22 декабря 2010

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

12 голосов
/ 22 декабря 2010

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

if (c == ' ')
11 голосов
/ 22 декабря 2010

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

if (c == ' ')
3 голосов
/ 11 июля 2016

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

3 голосов
/ 22 декабря 2010

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

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

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

3 голосов
/ 22 декабря 2010

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

private static int countNumChars(String s) {
    for(char c : s.toCharArray()){
        if (c == ' ') // your resulting outcome
    }
}
2 голосов
/ 28 июня 2015

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

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

Или:

if((int) ch) == 32)
{
    // Do something...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...