如何在Java Character类中表示空char

rah*_*sri 107 java

我想用字符串表示""java char ch = an empty character;中的一个...

像那样 ""

实际上我想在不留空间的情况下替换角色.

我认为理解这意味着什么就足够了:char ch = an empty character;.

ada*_*ost 125

您可以指定'\u0000'(或0).为此,请使用Character.MIN_VALUE.

Character ch = Character.MIN_VALUE;
Run Code Online (Sandbox Code Playgroud)

  • null char literal仍然是一个字符,占用存储空间. (11认同)
  • @cinnamontoast - 它的[null char literal](http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html) (7认同)
  • 这个问题要求一种表示"没有人物"的方法.虽然null字符在很多情况下都很有用,但它本身仍然是一个字符,所以不能解决这个问题.user3001已经给出的正确答案是使用Java的盒装字符引用类型,并在需要"无字符"时将其赋值为"null". (6认同)
  • ''\ 0'的确切含义是什么?@AVD (4认同)
  • @AVD是的,rahulsri询问如何表示遗失的角色.所以null字符引用适合. (2认同)

Jim*_* T. 81

char意味着一个字符.您不能为此类型指定零个字符.

这意味着没有char值String.replace(char, char)会返回一个长度不同的字符串.

  • 事实发生三年后,有人终于给出了正确而完整的答案. (13认同)
  • 这是一个非常准确的答案。 (2认同)

use*_*001 29

由于Character是从Object派生的类,因此可以将null指定为"instance":

Character myChar = null;
Run Code Online (Sandbox Code Playgroud)

问题解决了 ;)

  • 这是一个正确的解决方案,应该是公认的答案. (4认同)
  • 尽管这不能满足OP的要求,但这正是我一直在寻找的。 (2认同)
  • 最正确的答案是“无法完成”。这是您可以获得的最近的地方。 (2认同)
  • 字符是,但字符不是。 (2认同)

sud*_*ode 11

空String是char[]没有元素的包装器.你可以有一个空的char[].但你不能有一个"空" char.与其他原语一样,a char必须具有值.

你说你想"在不留空间的情况下替换一个角色".

如果您正在处理a char[],那么您将创建一个char[]删除该元素的新元素.

如果您正在处理a String,那么您将创建一个新的String(String是不可变的)并删除该字符.

以下是一些如何删除char的示例:

public static void main(String[] args) throws Exception {

    String s = "abcdefg";
    int index = s.indexOf('d');

    // delete a char from a char[]
    char[] array = s.toCharArray();
    char[] tmp = new char[array.length-1];
    System.arraycopy(array, 0, tmp, 0, index);
    System.arraycopy(array, index+1, tmp, index, tmp.length-index);
    System.err.println(new String(tmp));

    // delete a char from a String using replace
    String s1 = s.replace("d", "");
    System.err.println(s1);

    // delete a char from a String using StringBuilder
    StringBuilder sb = new StringBuilder(s);
    sb.deleteCharAt(index);
    s1 = sb.toString();
    System.err.println(s1);

}
Run Code Online (Sandbox Code Playgroud)


小智 6

如果要在不留空任何空格的情况下替换String中的字符,则可以使用StringBuilder实现此目的.String是java中的不可变对象,不能修改它.

String str = "Hello";
StringBuilder sb = new StringBuilder(str);
sb.deleteCharAt(1); // to replace e character
Run Code Online (Sandbox Code Playgroud)


小智 6

由于chars可以表示为整数(ASCII码),可以简单的写:

char c = 0;
Run Code Online (Sandbox Code Playgroud)

ASCII码中的0为null

  • 0 作为 UTF-16 代码单元(“char”)是 Unicode 代码点 U+0000 的完整 UTF-16 编码。与其他字符集或字符编码的任何相似性都是无关紧要的。Java 使用的是 UTF-16。 (2认同)

小智 5

我正在找这个。只需设置char c = 0;即可完美运行。尝试一下。

例如,如果您尝试从 String 中删除重复字符,一种方法是将字符串转换为 char 数组并存储在字符的哈希集中,这将自动防止重复。

然而,另一种方法是将字符串转换为字符数组,使用两个 for 循环并将每个字符与字符串/字符数组的其余部分进行比较(N^2 活动上的 Big O),然后对于找到的每个重复项只需将该字符设置为 0..

...并使用new String(char[])将生成的 char 数组转换为字符串,然后使用 sysout 进行打印(顺便说一句,这都是 java )。您将观察到所有设置为零的字符根本不存在,并且所有重复项都消失了。帖子很长,但只是想给你一个例子。

所以是设置char c = 0;或者如果对于字符数组,设置cArray[i]=0该特定的重复字符,您将删除它。


Pet*_*rey 0

您只能重复使用现有角色。例如\0,如果将其放入字符串中,您将得到一个包含一个字符的字符串。


假设你想要一个char这样的东西,当你这样做时

String s = 
char ch = ?
String s2 = s + ch; // there is not char which does this.
assert s.equals(s2);
Run Code Online (Sandbox Code Playgroud)

你需要做的是

String s = 
char ch = MY_NULL_CHAR;
String s2 = ch == MY_NULL_CHAR ? s : s + ch;
assert s.equals(s2);
Run Code Online (Sandbox Code Playgroud)

  • 你是什​​么意思“它不起作用”?你的意思是它不能编译吗?在这种情况下,它将是“char ch = '\0';”或“char ch = 0;” (2认同)
  • “如果上帝能做任何事,上帝能创造出一块他举不起来的石头吗?” 它与问题类似;你能创造一个不是角色的角色吗? (2认同)