¿Cómo comprobar si un carácter es igual a un espacio vacío?

104

Esto es lo que tengo:

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

Pero ese código dice que no puede encontrar Symbol para ese método. Recuerdo que Java tenía un comparador como este ... ¿Alguna sugerencia?

Jonik
fuente
2
espacio vacío - ¿ ' 'sin contenido?
Andreas Dolk

Respuestas:

213
if (c == ' ')

chares un tipo de datos primitivo, por lo que se puede comparar con ==.

Además, al usar comillas dobles, crea una Stringconstante ( " "), mientras que con comillas simples es una charconstante ( ' ').

Nikita Rybak
fuente
87

El código que necesita depende de lo que quiera decir con "un espacio vacío".

  • Si te refieres al carácter de espacio ASCII / Latin-1 / Unicode (0x20) también conocido como SP, entonces:

    if (ch == ' ') {
        // ...
    }
  • Si te refieres a cualquiera de los espacios en blanco ASCII tradicionales (SP, HT, VT, CR, NL), entonces:

    if (ch == ' ' || ch == '\t' || ch == '\r' || ch == '\n' || ch == '\x0b') {
        // ...
    }
  • Si se refiere a cualquier carácter de espacio en blanco Unicode, entonces:

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

Tenga en cuenta que hay espacios en blanco Unicode que incluyen códigos de control ASCII adicionales y algunos otros caracteres Unicode en planos de código superiores; ver el javadoc para Character.isWhitespace(char).


Lo que escribiste fue esto:

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

Esto está mal en varios niveles. En primer lugar, la forma en que el compilador de Java intenta interpretar eso es como una llamada a un método con una firma de boolean Equals(char, String).

  • Esto es incorrecto porque no existe ningún método, como informó el compilador en el mensaje de error.
  • Equalsnormalmente no sería el nombre de un método de todos modos. La convención de Java es que los nombres de los métodos comienzan con una letra minúscula.
  • Su código (como está escrito) estaba tratando de comparar un carácter y una cadena, pero chary Stringno son comparables y no se puede convertir a un tipo de base común.

Existe un comparador en Java, pero es una interfaz, no un método, y se declara así:

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

En otras palabras, el nombre del método es compare(no Equals), devuelve un número entero (no un booleano) y compara dos valores que se pueden promover al tipo dado por el parámetro de tipo.


Alguien (en una respuesta eliminada) dijo que intentaron esto:

    if (c == " ")

Eso falla por dos razones:

  • " "es un literal de cadena y no un literal de carácter, y Java no permite la comparación directa de valores Stringy char.

  • NUNCA debe comparar Strings o String literales usando ==. El ==operador de un tipo de referencia compara la identidad del objeto, no el valor del objeto. En el caso de Stringque sea común tener diferentes objetos con diferente identidad y el mismo valor. Una ==prueba a menudo dará una respuesta incorrecta ... desde la perspectiva de lo que está tratando de hacer aquí.

Stephen C
fuente
20

Podrías usar

Character.isWhitespace(c)

o cualquiera de los otros métodos disponibles en la clase Character.

  if (c == ' ')

también funciona.

Corv1nus
fuente
Bueno, en última instancia, depende de si solo está comprobando espacios. Quiero decir, si contiene una pestaña, obtendrás un falso positivo.
Actualizado. Puede hacer lo que necesita directamente de Character, aunque es excesivo.
Corv1nus
18

Dado que chares un tipo primitivo, solo puede escribir c == ' '.
Solo necesita llamar equals()para obtener tipos de referencia como Stringo Character.

SLaks
fuente
12

Mi sugerencia sería:

if (c == ' ')
MartinStettner
fuente
11

Para comparar caracteres, usa el ==operador:

if (c == ' ')
codaddict
fuente
5

Character.isSpaceChar(c) || Character.isWhitespace(c) trabajó para mi.

vbevans94
fuente
4

En este caso, está pensando en la función de comparación de cadenas "String".equals("some_text"). Los caracteres no necesitan utilizar esta función. En cambio, un ==operador de comparación estándar será suficiente.

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

fuente
3

A primera vista, su código no se compilará. Dado que la instrucción if anidada no tiene llaves, considerará la siguiente línea el código que debe ejecutar. Además, está comparando un carácter con una cadena, "". Intente comparar los valores como caracteres. Creo que la sintaxis correcta sería:

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

Pero, de nuevo, no estoy familiarizado con la "Equal"clase.

bakoyaro
fuente
3

Puedes probar:

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

O:

if((int) ch) == 32)
{
    // Do something...
}
A-Sharabiani
fuente
-5

Para comparar Stringstienes que usar la palabra clave igual .

if(c.equals(""))
{
}
Adnan B.
fuente
1) Esta pregunta trata sobre comparar caracteres, no cadenas. 2) No hay una equalspalabra clave en Java. Es un identificador. 3) Dado que ces un char(tipo primitivo !!), no puedes llamar c.equals(...). 4) Incluso si pudiera, no hay ningún charvalor al que se asigne "". Este último significa una cadena sin "caracteres". Eso no puede coincidir con un personaje.
Stephen C
La clave para responder esta Pregunta es encontrar un significado para "espacio vacío" que tenga algún tipo de sentido en el contexto.
Stephen C