Como verificar se um char é igual a um espaço vazio?

104

Aqui está o que eu tenho:

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

Mas esse código diz que não consegue encontrar o Symbol para esse método. Lembro-me de Java ter um comparador como este ... Alguma sugestão?

Jonik
fonte
2
espaço vazio - um ' 'sem conteúdo?
Andreas Dolk

Respostas:

213
if (c == ' ')

charé um tipo de dados primitivo, portanto, pode ser comparado ==.

Além disso, usando aspas duplas você cria Stringconstant ( " "), enquanto com aspas simples é uma charconstante ( ' ').

Nikita Rybak
fonte
87

O código de que você precisa depende do que você entende por "um espaço vazio".

  • Se você quer dizer o caractere de espaço ASCII / Latin-1 / Unicode (0x20) também conhecido como SP, então:

    if (ch == ' ') {
        // ...
    }
  • Se você se refere a qualquer um dos caracteres de espaço em branco ASCII tradicionais (SP, HT, VT, CR, NL), então:

    if (ch == ' ' || ch == '\t' || ch == '\r' || ch == '\n' || ch == '\x0b') {
        // ...
    }
  • Se você quer dizer qualquer caractere de espaço em branco Unicode, então:

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

Observe que há espaços em branco Unicode que incluem códigos de controle ASCII adicionais e alguns outros caracteres Unicode em planos de código superiores; consulte o javadoc para Character.isWhitespace(char).


O que você escreveu foi isto:

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

Isso está errado em vários níveis. Em primeiro lugar, a forma como o compilador Java tenta interpretar isso é como uma chamada a um método com uma assinatura de boolean Equals(char, String).

  • Isso está errado porque não existe nenhum método, conforme o compilador relatou na mensagem de erro.
  • Equalsnormalmente não seria o nome de um método. A convenção Java é que os nomes dos métodos começam com uma letra minúscula.
  • Seu código (como está escrito) foi tentando comparar um personagem e uma cadeia, mas chare Stringnão são comparáveis e não pode ser convertido para um tipo base comum.

Existe algo como um Comparador em Java, mas é uma interface, não um método, e é declarado assim:

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

Em outras palavras, o nome do método é compare(not Equals), ele retorna um inteiro (não um booleano) e compara dois valores que podem ser promovidos ao tipo fornecido pelo parâmetro type.


Alguém (em uma resposta excluída!) Disse que tentou isso:

    if (c == " ")

Isso falha por dois motivos:

  • " "é um literal de string e não um literal de caractere, e Java não permite comparação direta de valores Stringe char.

  • Você NUNCA deve comparar Strings ou literais de String usando ==. O ==operador em um tipo de referência compara a identidade do objeto, não o valor do objeto. No caso de Stringé comum ter objetos diferentes com identidade diferente e o mesmo valor. Um ==teste geralmente dará a resposta errada ... da perspectiva do que você está tentando fazer aqui.

Stephen C
fonte
20

Você poderia usar

Character.isWhitespace(c)

ou qualquer um dos outros métodos disponíveis na classe Character.

  if (c == ' ')

também funciona.

Corv1nus
fonte
Bem, em última análise, depende se ele está verificando apenas as vagas. Quero dizer, se ele contiver uma guia, você receberá um falso positivo.
Atualizada. Ele pode fazer o que precisa diretamente do personagem, embora seja um exagero.
Corv1nus
18

Como charé um tipo primitivo, você pode simplesmente escrever c == ' '.
Você só precisa chamar equals()para tipos de referência como Stringou Character.

SLaks
fonte
12

Minha sugestão seria:

if (c == ' ')
MartinStettner
fonte
11

Para comparar o personagem, você usa o ==operador:

if (c == ' ')
codadicto
fonte
5

Character.isSpaceChar(c) || Character.isWhitespace(c) trabalhou para mim.

vbevans94
fonte
4

Neste caso, você está pensando na função de comparação de String "String".equals("some_text"). Os caracteres não precisam usar esta função. Em vez disso, um ==operador de comparação padrão será suficiente.

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

fonte
3

À primeira vista, seu código não será compilado. Como a instrução if aninhada não tem chaves, ela considerará a próxima linha o código que deve executar. Além disso, você está comparando um char com uma String, "". Tente comparar os valores como caracteres. Acho que a sintaxe correta seria:

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

Mas, novamente, não estou familiarizado com a "Equal"classe

Bakoyaro
fonte
3

Podes tentar:

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

Ou:

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

Para comparar, Stringsvocê deve usar a palavra-chave igual .

if(c.equals(""))
{
}
Adnan B.
fonte
1) Esta questão é sobre como comparar caracteres, não strings. 2) Não há equalspalavra-chave em Java. É um identificador. 3) Como cé um char(tipo primitivo !!), você não pode chamar c.equals(...). 4) Mesmo se você pudesse, não há nenhum charvalor mapeado para "". O último significa uma string sem "nenhum caractere". Isso não pode corresponder a um personagem.
Stephen C
A chave para responder a esta pergunta é encontrar um significado para "espaço vazio" que faça algum tipo de sentido no contexto.
Stephen C