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

这是我得到的:

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

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

583793 次浏览
if (c == ' ')

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

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

要比较字符,可以使用 ==操作符:

if (c == ' ')

由于 char是基元类型,所以只需编写 c == ' '即可。
对于像 StringCharacter这样的引用类型,您只需要调用 equals()

我的建议是:

if (c == ' ')

在本例中,您考虑的是字符串比较函数 "String".equals("some_text")。字符不需要使用这个函数。相反,一个标准的 ==比较运算符就足够了。

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

你可以用

Character.isWhitespace(c)

字符类中的任何其他可用方法。

  if (c == ' ')

也可以。

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

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

但话说回来,我对 "Equal"类并不熟悉

您需要的代码取决于您所说的“空白空间”是什么意思。

  • 如果你指的是 ASCII/拉丁文 -1/Unicode 空间字符(0x20)即 SP,那么:

    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)) {
    // ...
    }
    

Note that there are Unicode whitespace includes additional ASCII control codes, and some other Unicode characters in higher code planes; see the javadoc for Character.isWhitespace(char).


What you wrote was this:

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

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

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

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

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

In other words, the method name is compare (not Equals), it returns an integer (not a boolean), and it compares two values that can be promoted to the type given by the type parameter.


有人(在一个被删除的回答中)说他们试过这样做:

    if (c == " ")

这种做法失败有两个原因:

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

  • 永远不要使用 ==比较字符串或字符串文字。引用类型上的 ==运算符比较对象标识,而不是对象值。在 String的情况下,具有不同身份和相同值的不同对象是常见的。一个 ==测试将 often give the wrong answer... 从你正在尝试做什么的角度来看。

要比较 Strings,必须使用 等于关键字。

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

你可以试试:

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

或者:

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

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