【问题标题】:How to check whether an element of a character array is empty?如何检查字符数组的元素是否为空?
【发布时间】:2014-11-29 09:38:47
【问题描述】:

我需要检查 java 字符数组的元素是否为空。我尝试了以下代码,但没有奏效。怎么了?

char c[] = new char[3];
c[0] = 'd';

for (int i = 0; i < c.length; i++) {
    if(c[i] == null) {
        System.out.println(i + " is empty");
    }
}

【问题讨论】:

  • 附带问题:char[] c 通常优于 char c[],因为它将所有类型信息保存在一个位置。

标签: java arrays char


【解决方案1】:

让我们把数组排除在外——数组实际上只是变量的集合。让我们考虑一个变量。假设我们有这样的方法:

public boolean isEmpty(char c)

那会做什么? c 的值不能是null,因为char 是原始类型。它可能是 U+0000(又名 '\u0000''\0' 在 Java 中作为字符文字),这是 char 的默认值(用于数组元素和字段),但它与空引用不同。

如果您想要一个类似于char 的类型,但它是一个引用类型,您应该考虑使用Character - char 的包装器类型就像Integerint 一样。或者,如果您知道您将永远使用 U+0000 作为有效值,您可以坚持使用它。

但是,更好的选择通常是设计您的代码,以便您不需要需要“空或非空”的概念。我们不知道您要在这里实现什么,但至少考虑一下通常是一件好事。对于数组,替代方法通常是使用 ArrayList&lt;E&gt; - 但当然你不能在 Java 中使用 ArrayList&lt;char&gt;,因为 Java 泛型不允许原始类型参数 :(

【讨论】:

  • 最佳答案。正是我需要知道的。
【解决方案2】:

原始数组的元素不能为空。如果您没有自己初始化它,它将始终具有默认值。 char 的默认值为 0。

【讨论】:

  • 那我该怎么办呢?
  • @xXLemonProgrammerXx 这取决于默认值 0 是否可以是代码中的有效值。如果不能,您可以简单地检查if (c[i] &gt; 0)。如果0 是一个有效值,您可以使用盒装版本 - 字符 - 可以为空。或者可以使用int数组代替char数组,将数组元素初始化为-1。
【解决方案3】:

使用Character 类代替原始char

Character c[] = new Character[3];
c[0] = 'd';

for(int i = 0; i < c.length; i++){
    if(c[i] == null){
        System.out.println(i + " is empty");
    }
}

【讨论】:

    【解决方案4】:

    您不能使用null,因为char 是原始类型。 null 仅适用于对象。使用 \0,因为它是 null 的原始版本。

    【讨论】:

      【解决方案5】:

      primitive char的默认值为0,可以用0检查 字符 c[] = 新字符 [3]; c[0] = 'd';

      for(int i = 0; i < c.length; i++){
          if(c[i] == 0){
              System.out.println(i + " is empty");
          }
      }
      

      甚至,char=0也是一个字符

      【讨论】:

        【解决方案6】:

        您的代码是否正在编译? 您应该在此代码行看到一条错误消息 if(c[i] == null)

        从错误消息中,编译器清楚地表明“运算符 == 未定义参数类型 char,null”。

        这应该足以保证原始数组(在本例中为字符数组)的元素不能为空。

        【讨论】:

          猜你喜欢
          • 2015-08-09
          • 2013-07-20
          • 2019-05-14
          • 1970-01-01
          • 1970-01-01
          • 2015-01-13
          • 1970-01-01
          • 1970-01-01
          • 2021-10-03
          相关资源
          最近更新 更多