raw*_*wat 5 java string char null-character java-8
检查字符串是否仅包含空字符的正确方法是什么?
String s = "\u0000";
if(s.charAt(0) == 0) {
System.out.println("null characters only");
}
Run Code Online (Sandbox Code Playgroud)
或者
String s = "\0\0";
for(int i = 0; i < s.length(); i++) {
if(s.charAt(i) == 0)
continue;
else break;
}
Run Code Online (Sandbox Code Playgroud)
两者都有效。但是有没有更好,更简洁的方法来执行此检查。是否有实用程序可以检查 java 中的字符串是否仅包含空字符(\u0000OR \0)?
和之间有什么区别'\0'和'\u0000'?
一个char文字(在Java中)可以写成多种方式(所有这些都是相当)。例如,
System.out.println('\u0000' == '\0');
System.out.println('\u0000' == 0);
Run Code Online (Sandbox Code Playgroud)
会输出
true
true
Run Code Online (Sandbox Code Playgroud)
因为 achar是 Java 中的 16 位整数类型。并且\u0000,\0和 的所有三个0都是相同的值。至于查找 a 是否String仅包含0 char值 - 只需对其进行迭代即可。喜欢,
boolean allNulls = true;
for (int i = 0; i < s.length(); i++) {
if (s.charAt(i) != 0) {
allNulls = false;
break;
}
}
Run Code Online (Sandbox Code Playgroud)
您可以获取chars()as an IntStream,然后使用allMatch:
if (yourString.chars().allMatch(x -> x == 0)) {
// all null chars!
}
Run Code Online (Sandbox Code Playgroud)
小智 3
您可以使用正则表达式
匹配一个或多个\u0000
boolean onlyNulls = string.matches("\u0000+"); // or "\0+"
Run Code Online (Sandbox Code Playgroud)
使用*代替+也匹配空字符串
(Sweeper 的流解决方案是我的首选解决方案 - 恕我直言,它更类似于预期的任务,尽管我会使用'\u0000'而不是0)