Respostas:
if (c == ' ')
char
é um tipo de dados primitivo, portanto, pode ser comparado ==
.
Além disso, usando aspas duplas você cria String
constant ( " "
), enquanto com aspas simples é uma char
constante ( ' '
).
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)
.
Equals
normalmente 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.char
e String
nã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 String
e 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.
Você poderia usar
Character.isWhitespace(c)
ou qualquer um dos outros métodos disponíveis na classe Character.
if (c == ' ')
também funciona.
Minha sugestão seria:
if (c == ' ')
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
}
}
À 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
Podes tentar:
if(Character.isSpaceChar(ch))
{
// Do something...
}
Ou:
if((int) ch) == 32)
{
// Do something...
}
Para comparar, Strings
você deve usar a palavra-chave igual .
if(c.equals(""))
{
}
equals
palavra-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 char
valor mapeado para ""
. O último significa uma string sem "nenhum caractere". Isso não pode corresponder a um personagem.
' '
sem conteúdo?