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

我想在 Java 中将一个空字符表示为字符串中的 ""..。

就像那个 char ch = an empty character;

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

我认为这可能足以理解这意味着什么: 没有字符,甚至没有空间。

384543 次浏览

只能重用现有字符。如果你把它放在一个字符串中,你就会得到一个包含一个字符的字符串。


说你想要一个 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);

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

Character ch = Character.MIN_VALUE;

你不能是包含 没有字符的字符串的文本。它不包含“空字符”(不管你是什么意思)。

因为字符是从 Object 派生的类,所以可以将 null 赋值为“ instance”:

Character myChar = null;

问题解决;)

空 String 是 char[]上没有元素的包装器。你可以有一个空的 char[]。但是你不能有一个“空的”char。像其他原语一样,char必须有一个值。

你说你想“在不留空间的情况下替换一个角色”。

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

如果您处理的是 String,那么您将创建一个新的 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);


}

如果您希望替换 String 中的字符而不留下任何空白,那么可以使用 StringBuilder 来实现这一点。字符串在 java 中是不可变物件的,你不能修改它。

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

char意味着只有一个字符。不能为这种类型分配零个字符。

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

在第二个参数中使用 \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

我就是这么做的。

char[] myEmptyCharArray = "".toCharArray();
char ch = Character.MIN_VALUE;

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

在 java 中没有像 空字符字面值空字符字面值那样的东西,换句话说,“与 空字符串字面值不同”没有任何意义

最接近表示空字符文字的方法是使用长度为零的 char [] ,比如:

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

如果你引用字符串类,它的缺省构造函数会使用 new char[0]创建一个空字符序列

另外,使用 Charter.MIN _ VALUE 是不正确的,因为它不是真正的空字符,而是类型字符的最小值。

我也不喜欢 Character c = null;作为一个解决方案,主要是因为如果 jvm 试图取消装箱,它将抛出 NPE。其次,null 基本上是一个不引用 w.r.t 引用类型的引用,这里我们处理的是不接受 null 作为可能值的原语类型。

假设在字符串中,比如 str,OP 希望用空字符替换字符的所有匹配项,比如‘ x’,然后尝试使用:

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

由于 chars可以表示为整数(ASCII-Codes) ,您可以简单地写:

char c = 0;

ASCII 码中的0是 null

你可以这样做:

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

我一直在找这个。简单地设置 char c = 0;和它的工作原理完美。尝试它。

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

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

... 并使用 new String(char[])将生成的字符数组转换为字符串,然后使用 sysout 进行打印(这都是 java 文件)。你会发现所有设置为0的字符都不存在,所有重复的字符都消失了。但我只是想给你举个例子。

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

前面的字符串 = EMPTY _ SPACE + TAB + “ word”+ TAB + EMPTY _ SPACE

在哪里 EMPTY _ SPACE = “”(这是 String) TAB =’t’(这是字符)

置换(’t’,’0’)之后的字符串 手段 后 = “文字”