Як перевірити, чи знак 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.