【问题标题】:How to check if a char is equal to an empty space?如何检查一个字符是否等于一个空格?
【发布时间】:2011-05-29 10:48:21
【问题描述】:

这是我得到的:

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

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

【问题讨论】:

  • 空白空间 - 没有内容的' '

标签: java char whitespace


【解决方案1】:
if (c == ' ')

char是原始数据类型,所以可以和==比较。

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

【讨论】:

    【解决方案2】:

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

    • 如果您指的是 ASCII / Latin-1 / Unicode 空格字符 (0x20) aka 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中有Comparator这样的东西,但它是一个接口而不是一个方法,它是这样声明的:

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

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


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

        if (c == " ")
    

    失败有两个原因:

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

    • 永远不要使用== 比较字符串或字符串文字。引用类型上的 == 运算符比较对象标识,而不是对象值。在String 的情况下,不同的对象具有不同的身份和相同的值是很常见的。 == 测试通常会给出错误的答案 ...从您在此处尝试执行的操作的角度来看。

    【讨论】:

      【解决方案3】:

      你可以使用

      Character.isWhitespace(c)
      

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

        if (c == ' ')
      

      也可以。

      【讨论】:

      • 好吧,这最终取决于他是否只检查空格。我的意思是如果它包含一个标签,你会得到一个误报。
      • 已更新。他可以直接从 Character 做他需要的事情,尽管这有点过分了。
      【解决方案4】:

      由于char 是原始类型,您可以只写c == ' '
      对于StringCharacter 等引用类型,您只需调用equals()

      【讨论】:

        【解决方案5】:

        我的建议是:

        if (c == ' ')
        

        【讨论】:

          【解决方案6】:

          要比较字符,请使用 == 运算符:

          if (c == ' ')
          

          【讨论】:

            【解决方案7】:

            Character.isSpaceChar(c) || Character.isWhitespace(c) 为我工作。

            【讨论】:

              【解决方案8】:

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

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

              【讨论】:

                【解决方案9】:

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

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

                不过话说回来,我不熟悉"Equal"

                【讨论】:

                  【解决方案10】:

                  你可以试试:

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

                  或者:

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

                  【讨论】:

                    【解决方案11】:

                    要比较 Strings,您必须使用 equals 关键字。

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

                    【讨论】:

                    • 1) 这个问题是关于比较字符,而不是字符串。 2) Java 中没有equals 关键字。它是一个标识符。 3)由于cchar(原始类型!!),所以不能调用c.equals(...)。 4) 即使可以,也没有映射到""char 值。后者表示“其中没有字符”的字符串。那不能匹配一个字符。
                    • 回答这个问题的关键是想出在上下文中具有某种意义的“空白空间”的含义。
                    猜你喜欢
                    • 1970-01-01
                    • 2012-05-23
                    • 2016-05-17
                    • 2018-11-12
                    • 1970-01-01
                    • 1970-01-01
                    • 2022-06-19
                    • 2012-09-28
                    • 1970-01-01
                    相关资源
                    最近更新 更多