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?


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 ( ' ').


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.


20

Você poderia usar

Character.isWhitespace(c)

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

  if (c == ' ')

também funciona.


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.



11

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

if (c == ' ')

5

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


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
    }
}

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


3

Podes tentar:

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

Ou:

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

-5

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

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

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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.