问题描述
String s = "\u0000";
if(s.charat(0) == 0) {
System.out.println("null characters only");
}
或
String s = "\0\0";
for(int i = 0; i < s.length(); i++) {
if(s.charat(i) == 0)
continue;
else break;
}
两者都有效。但是有没有更好,更简洁的方法来执行此检查。是否有一个实用程序可以检查 java 中的字符串是否只包含 null
字符(\u0000
OR \0
) ?
'\0'
和 '\u0000'
之间有什么区别?
解决方法
一个 char
文字(在 Java 中)可以有多种写法(所有这些都是等价的)。例如,
System.out.println('\u0000' == '\0');
System.out.println('\u0000' == 0);
会输出
true
true
因为 char
是 Java 中的 16 位整数类型。并且 \u0000
、\0
和 0
这三个都是相同的值。至于查找 String
是否仅包含 0
char
值 - 只需对其进行迭代即可。喜欢,
boolean allNulls = true;
for (int i = 0; i < s.length(); i++) {
if (s.charAt(i) != 0) {
allNulls = false;
break;
}
}
,
您可以将 chars()
作为 IntStream
,然后使用 allMatch
:
if (yourString.chars().allMatch(x -> x == 0)) {
// all null chars!
}
,
您可以使用正则表达式
匹配一个或多个\u0000
boolean onlyNulls = string.matches("\u0000+"); // or "\0+"
使用 *
而不是 +
来匹配空字符串
(Sweeper 的流 solution 是我的首选解决方案 - 恕我直言,它更像预期的任务,尽管我会使用 '\u0000'
而不是 0
)
我不认为有预定义的方法来检查它,我认为你提到的第二个是测试相同的正确方法
,您可以使用现有的 String 方法,例如
trim
和 isEmpty
结合使用。
考虑一下:
String s = "\u0000";
s.trim().isBlank()
,
\u0000 为 Unicode 值,控制台输出为空格
Stream.of("\u0000","\0\0","jack","luca")
.filter(s -> !s.trim().equals(""))
.forEach(System.out::println);
输出:
jack
luca