如何检查一个字符是否等于空格?

120

这是我得到的:

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

但那段代码显示找不到该方法的符号。我记得Java有一个类似的比较器...有什么建议吗?


2
空格 - 一个没有内容的 ' ' - Andreas Dolk
11个回答

246
if (c == ' ')

char是一种原始数据类型,因此可以使用==进行比较。

同时,如果你使用双引号,则创建一个String常量(" "),而如果使用单引号,则是一个char常量(' ')。


91

你需要的代码取决于你所说的“空白区域”的含义。

  • If you mean the ASCII / Latin-1 / Unicode space character (0x20) aka SP, then:

    if (ch == ' ') {
        // ...
    }
    
  • If you mean any of the traditional ASCII whitespace characters (SP, HT, VT, CR, NL), then:

    if (ch == ' ' || ch == '\t' || ch == '\r' || ch == '\n' || ch == '\x0b') {
        // ...
    }
    
  • If you mean any Unicode whitespace character, then:

    if (Character.isWhitespace(ch)) {
        // ...
    }
    
请注意,Unicode空格包括额外的ASCII控制码以及更高代码平面中的其他Unicode字符;请参阅Character.isWhitespace(char)的javadoc。
    if (Equals(ch, " ")) {
        // ...
    }

这在很多方面都是错误的。首先,Java编译器尝试将其解释为一个带有签名为boolean Equals(char, String)的方法调用。

  • 这是错误的,因为没有该方法,正如编译器在错误消息中报告的那样。
  • Equals通常也不是方法的名称。Java约定是方法名称以小写字母开头。
  • 您的代码(按照编写方式)正在尝试比较字符和字符串,但charString不可比较,也无法转换为公共基类型。

在Java中确实有一个称为Comparator的东西,但它是一个接口而不是一个方法,并且声明如下:

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

换句话说,方法名是 compare(不是 Equals),它返回一个整数(而不是布尔值),并比较两个可以提升为类型参数所给定类型的值。
有人(在已删除的回答中!)说他们尝试过这样做:
    if (c == " ")

这种方法失败的原因有两个:

  • " " 是一个字符串常量而不是字符常量,Java 不允许直接比较 Stringchar 值。

  • 你永远不应该使用 == 来比较字符串或字符串常量。在引用类型上,== 运算符比较的是对象的标识而不是对象的值。在 String 的情况下,通常会有不同的对象具有不同的标识和相同的值。一个 == 测试将会经常给出错误的答案......从你在这里尝试做的事情的角度来看。


20
你可以使用 标签。
Character.isWhitespace(c)

或使用Character类中的任何其他可用方法。

  if (c == ' ')

也可以正常工作。


这最终取决于他是否仅检查空格。我的意思是,如果它包含制表符,你会得到一个错误的结果。 - user372743
更新了。虽然这有些过度,但他可以直接从字符中做他需要的事情。 - Corv1nus

18

由于char是一种基本类型,你可以直接写成c == ' '
只有对于引用类型,如StringCharacter,才需要调用equals()


12

我的建议是:

if (c == ' ')

11

要比较字符,您可以使用 == 运算符:

if (c == ' ')

7
"

Character.isSpaceChar(c) || Character.isWhitespace(c) 可以解决我的问题。

"

4

在这种情况下,您正在考虑字符串比较函数"String".equals("some_text")。字符不需要使用此函数。相反,标准的==比较运算符就足够了。

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

4
您可以尝试以下方法:
if(Character.isSpaceChar(ch))
{
    // Do something...
}

或者:

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

3

乍一看,你的代码不会编译。由于嵌套if语句没有任何大括号,它将认为下一行是应该执行的代码。此外,你正在将一个char与一个字符串" "进行比较。尝试将值作为字符进行比较。我认为正确的语法应该是:

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

但是,我并不熟悉"Equal"


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接