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

2022-08-31 09:07:57

以下是我得到的:

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

但是该代码说它找不到该方法的符号。我记得Java有一个这样的比较器...有什么建议吗?


答案 1
if (c == ' ')

char是一种基元数据类型,因此可以将其与 进行比较。==

此外,通过使用双引号,您可以创建常量(),而使用单引号,它是常量()。String" "char' '


答案 2

您需要的代码取决于您所说的“空白空间”的含义。

  • 如果你指的是ASCII / Latin-1 / Unicode空格字符(0x20)又名SP,那么:

    if (ch == ' ') {
        // ...
    }
    
  • 如果您指的是任何传统的 ASCII 空格字符(SP、HT、VT、CR、NL),则:

    if (ch == ' ' || ch == '\t' || ch == '\r' || ch == '\n' || ch == '\x0b') {
        // ...
    }
    
  • 如果您指的是任何 Unicode 空格字符,则:

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

请注意,有Unicode空格包括额外的ASCII控制代码,以及更高代码平面中的其他一些Unicode字符;请参阅 Character.isWhitespace(char) 的 javadoc。


你写的是这样的:

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

这在很多层面上都是错误的。首先,Java 编译器尝试将其解释为对签名为 .boolean Equals(char, String)

  • 这是错误的,因为不存在任何方法,如错误消息中报告的编译器。
  • Equals无论如何,通常不会是方法的名称。Java 约定是方法名称以小写字母开头。
  • 您的代码(如所写的)试图比较字符和字符串,但并不具有可比性,并且不能转换为通用基类型。charString

Java中有一个比较器这样的东西,但它是一个接口而不是一个方法,它是这样声明的:

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

换句话说,方法名称是(不是),它返回一个整数(不是布尔值),并比较两个可以提升为类型参数给定类型的值。compareEquals


有人(在删除的答案中!)说他们尝试了这个:

    if (c == " ")

失败的原因有两个:

  • " "是字符串文本而不是字符文本,Java 不允许直接比较 和 值。Stringchar

  • 切勿使用 比较字符串或字符串文本。引用类型的运算符比较对象标识,而不是对象值。在这种情况下,通常具有不同标识和相同值的不同对象。测试通常会给出错误的答案...从你在这里试图做的事情的角度来看。====String==


推荐