如何检查字符是否等于空白?


104

这是我得到的:

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

但是该代码表示​​无法为该方法找到Symbol。我记得Java拥有这样的比较器...有什么建议吗?


2
空白空间 - ' '没有内容?
Andreas Dolk 2010年

Answers:


213
if (c == ' ')

char是原始数据类型,因此可以与进行比较==

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


87

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

  • 如果您是指ASCII /拉丁文-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字符; 请参阅javadoc Character.isWhitespace(char)


您写的是这样的:

    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(not Equals),它返回一个整数(不是布尔值),并且将可以提升为type参数给定类型的两个值进行比较。


有人(在已删除的答案中!)说,他们尝试过此操作:

    if (c == " ")

失败有两个原因:

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

  • 您永远不要使用来比较字符串或字符串文字====引用类型上的运算符比较对象标识,而不是对象值。在这种情况下,String通常会有具有不同标识和相同值的不同对象。一种==测试将经常给出错误的答案 ......从你正试图在这里做透视。


20

你可以用

Character.isWhitespace(c)

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

  if (c == ' ')

也可以。


好吧,这最终取决于他是否只检查空格。我的意思是,如果它包含选项卡,您将得到误报。

更新。他可以直接从角色中完成他所需要的,尽管这太过分了。
Corv1nus

18

由于char是原始类型,因此只需编写即可c == ' '
您只需要调用equals()诸如String或的引用类型Character



11

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

if (c == ' ')

5

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


4

在这种情况下,您正在考虑String比较功能"String".equals("some_text")。字符不需要使用此功能。取而代之的是标准==比较运算符就足够了。

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

3

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

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

但是话又说回来,我对这"Equal"门课不熟悉


3

你可以试试:

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

要么:

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

-5

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

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

1)这个问题是关于比较字符,而不是字符串。2)equalsJava中没有关键字。它是一个标识符。3)因为cchar(原始类型!),所以您不能调用c.equals(...)。4)即使可以,也没有char映射到的值""。后者表示“没有字符”的字符串。无法匹配字符。
斯蒂芬·

回答这个问题的关键是想出“空空间”的含义,这种含义在上下文中具有某种意义。
斯蒂芬·
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.