Як перевірити, чи знак char дорівнює порожньому простору?


104

Ось що я маю:

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

Але цей код говорить, що він не може знайти символ для цього методу. Я пам’ятаю, що у Java був такий порівняльник ... Будь-які пропозиції?


2
порожній простір - a ' 'без вмісту?
Андреас Долк

Відповіді:


213
if (c == ' ')

char- це примітивний тип даних, тому його можна порівняти ==.

Також, використовуючи подвійні лапки, ви створюєте Stringконстанту ( " "), тоді як з одинарними цитатами це charконстанта ( ' ').


87

Код, який вам потрібен, залежить від того, що ви маєте на увазі під "порожнім простором".

  • Якщо ви маєте на увазі символ простору 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(не Equals), воно повертає ціле число (не булеве значення) і порівнює два значення, які можна просунути до типу, заданого параметром типу.


Хтось (у видаленій відповіді!) Сказав, що спробував це:

    if (c == " ")

Це не вдається з двох причин:

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

  • НІКОЛИ не слід порівнювати рядки або рядкові літерали з використанням ==. ==Оператор засланого типу порівнює ідентифікатор об'єкта, а НЕ значення об'єкта. У випадку Stringзвичайного є різні об'єкти з різною ідентичністю і однаковим значенням. ==Тест часто дає неправильну відповідь ... з точки зору того , що ви намагаєтеся зробити тут.


20

Ви можете використовувати

Character.isWhitespace(c)

або будь-який з інших доступних методів у класі символів.

  if (c == ' ')

також працює.


Ну, в кінцевому підсумку залежить, чи перевіряє він лише пробіли. Я маю на увазі, якщо вона містить вкладку, ви отримаєте помилковий позитив.

Оновлено. Він може робити те, що йому потрібно безпосередньо від персонажа, хоча це надмірно.
Corv1nus

18

Оскільки charце примітивний тип, ви можете просто писати c == ' '.
Вам потрібно зателефонувати лише equals()для таких посилань, як Stringабо Character.





4

У цьому випадку ви думаєте про функцію порівняння рядків "String".equals("some_text"). Символам не потрібно використовувати цю функцію. Натомість достатньо стандартного ==оператора порівняння.

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

3

На перший погляд, ваш код не складеться. Оскільки у вкладеному файлі, якщо у оператора немає дужок, він буде розглядати наступний рядок код, який він повинен виконати. Крім того, ви порівнюєте знак із рядком, "". Спробуйте порівняти значення як символи. Я думаю, що правильним буде синтаксис:

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

Але знову ж таки, я не знайомий з "Equal"класом


3

Ви можете спробувати:

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

Або:

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

-5

Для порівняння Stringsви повинні використовувати ключове слово рівний .

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

1) Це запитання стосується порівняння символів, а не рядків. 2) У equalsJava немає ключового слова. Це ідентифікатор. 3) Оскільки cце char(примітивний тип !!), ви не можете зателефонувати c.equals(...). 4) Навіть якщо ви могли, немає charзначення, яке відображатиметься "". Останнє означає Рядок з "жодними символами в ньому". Це не може відповідати персонажу.
Stephen C

Ключовим словом для відповіді на це питання є сенс для "порожнього простору", який має певний сенс у контексті.
Stephen C
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.