如何在Java Character类中表示空字符


125

我想""用String 表示Java中的空字符 ...

像那样 char ch = an empty character;

实际上,我想替换字符而不留空格。

我认为理解这意味着什么可能就足够了:没有字符甚至没有空格。


2
显示您要执行的替换操作的示例。
sudocode 2011年

1
@rahulsri我看不到您所指的代码。
彼得·劳瑞

2
我认为OP想要发挥String.replace(' ', EMPTY_CHARACTER)与相同的效果String.replace(" ", "")。即删除所有空格。
罗兰

Answers:


133

您可以分配'\u0000'(或0)。为此,请使用Character.MIN_VALUE

Character ch = Character.MIN_VALUE;

5
到底是'\0'什么意思?@AVD
肉桂吐司

8
@cinnamontoast-它是一个空字符常量
adatapost

11
空字符文字仍然是字符,并占用存储空间。
Jimmy T.

7
这个问题要求一种表示“没有字符”的方法。尽管空字符在许多情况下很有用,但它本身仍然是一个字符,因此不能回答这个问题。用户3001已经给出正确的答案,那就是使用Java的带框字符引用类型,并在需要“无字符”时为其赋予“空”值。
克里斯·哈顿

2
@AVD是的,rahulsri询问如何表示缺少的角色。因此,适合使用空字符引用。
克里斯·哈顿

95

char表示一个字符。您不能为该类型分配零个字符。

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


13
事实发生三年后,终于有人给出了正确而完整的答案。
Malnormalulo 2015年

这是一个非常准确的答案。
Edgar Asatryan

36

由于Character是派生自Object的类,因此可以将null分配为“ instance”:

Character myChar = null;

问题解决了 ;)


5
这是一个正确的解决方案,应该是公认的答案。
克里斯·哈顿

2
尽管这不能满足OP的要求,但这是我一直在寻找的。
Elyess Abouda 2014年

2
最正确的答案是“无法完成”。这是您可以获得的最近的地方。
Malnormalulo 2015年

2
字符是,但字符不是。
Pieter De Bie

12

空字符串是char[]不包含任何元素的包装。你可以有一个空的char[]。但是您不能拥有“空” char。像其他基元一样,a char必须具有一个值。

您说要“在不留空格的情况下替换字符”。

如果要处理char[],则可以创建一个char[]删除了该元素的新对象。

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

以下是一些有关如何删除字符的示例:

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);

}

除了replace()解决方案外,其他两个将仅替换字符的第一个匹配项,而不是全部替换。
sactiw

8

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

char c = 0;

ASCII码中的0为null


作为charUnicode代码点U + 0000的完整UTF-16编码为UTF-16代码单元(),0 。与其他字符集或字符编码的任何相似性均无关紧要。Java使用UTF-16。
Tom Blodget

6

如果要替换字符串中的字符而又不留任何空白,则可以使用StringBuilder来实现。字符串是java中的不可变对象,不能修改。

String str = "Hello";
StringBuilder sb = new StringBuilder(str);
sb.deleteCharAt(1); // to replace e character

3

你不能 “”是字符串的文字,不包含任何字符。它不包含“空字符”(无论您指的是什么)。


3

我一直在寻找。只需设置char c = 0;和即可完美运行。试试吧。

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

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

...并用于new String(char[])将生成的char数组转换为字符串,然后使用sysout进行打印(这全部是java btw)。您将观察到所有设置为零的字符根本就不存在,所有重复项都消失了。长篇文章,但只想举一个例子。

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


2

在Java中,没有什么可以作为空字符文字,换句话说,“”与“”没有任何含义,意味着“空的String文字。

表示空字符文字的最接近方法是通过零长度char [],类似:

char[] cArr = {};         // cArr is a zero length array
char[] cArr = new char[0] // this does the same

如果您引用String类,则其默认构造函数使用以下命令创建一个空字符序列 new char[0]

另外,使用Character.MIN_VALUE也不正确,因为它不是真正的空字符,而是类型character的最小值。

我也不喜欢 Character c = null;这种解决方案,主要是因为jvm如果尝试取消装箱将抛出NPE。其次,null基本上是对无引用类型的引用,这里我们处理的是原始类型,该类型不接受null作为可能的值。

假设在字符串中假设为str,OP希望将所有出现的字符“ x”替换为空字符“”,然后尝试使用:

str.replace("x", "");

1

这就是我的方法。

char[] myEmptyCharArray = "".toCharArray();

那不是一个空字符。它是一个零长度的字符数组。
斯蒂芬·C

1
char ch = Character.MIN_VALUE;

上面的代码将ch使用char可以具有的最小值(即\u0000)来初始化变量。


1

您可以执行以下操作:

mystring.replace(""+ch, "");

0

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


说您想要一个char这样的东西,当您这样做

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

您要做的是

String s = 
char ch = MY_NULL_CHAR;
String s2 = ch == MY_NULL_CHAR ? s : s + ch;
assert s.equals(s2);

1
你是什么意思it not worked?您是说它不编译吗?在这种情况下,这将是char ch = '\0';char ch = 0;
彼得Lawrey

@rahulsri所有字符都是字符,没有字符,不是字符。您需要确定您的实际需求,然后尝试以其他方式解决它。该nul字符是指示它的特点,它是不是真的有很多特殊字符中的一个,但它本身还是一个字符。
彼得·劳里

2
“如果上帝能做任何事情,即使他无法举起,上帝还能创造一块石头吗?” 与问题类似;您可以创建不是角色的角色吗?
彼得·劳瑞

0

\b在第二个参数中使用运算符(退格转义运算符)

String test= "Anna Banana";

System.out.println(test); //returns Anna Banana<br><br>
System.out.println(test.replaceAll(" ","\b")); //returns AnnaBanana removing all the spaces in the string

xD ...如果尝试使用这样经过错误处理(是,经过错误处理,损坏,毁容)的字符串作为文件名的一部分,将会导致有趣的事情。
Scre

0

嘿,我总是为通常不在Java中实现的自定义内容制作方法。这是我用来从String Fast中删除字符的一种简单方法

    public static String removeChar(String str, char c){
        StringBuilder strNew=new StringBuilder(str.length());
        char charRead;
        for(int i=0;i<str.length();i++){
            charRead=str.charAt(i);
            if(charRead!=c)
                strNew.append(charRead);
        }
        return strNew.toString();
    }

为了进行解释,是的,没有可替换的空字符,但是您可以像这样删除字符。我知道这是一个老问题,但我发布了此答案,因为此代码可能对某些人有帮助。

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.