如何最好地确定一个字符串是否仅包含空字符?
How best to determine if a String contains only null characters?
检查字符串是否仅包含空字符的正确方法是什么?
String s = "\u0000";
if(s.charAt(0) == 0) {
System.out.println("null characters only");
}
或
String s = "[=11=][=11=]";
for(int i = 0; i < s.length(); i++) {
if(s.charAt(i) == 0)
continue;
else break;
}
两者都有效。但是有没有更好更简洁的方法来执行这个检查。是否有实用程序来检查 java 中的字符串是否仅包含 null
字符(\u0000
或 [=13=]
)?
'[=14=]'
和'\u0000'
有什么区别?
一个char
文字(在Java中)可以有多种写法(所有这些都是等价的)。例如,
System.out.println('\u0000' == '[=10=]');
System.out.println('\u0000' == 0);
会输出
true
true
因为char
是Java中的16位整数类型。 \u0000
、[=16=]
和 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!
}
您可以使用现有的字符串方法,例如
trim
和 isEmpty
的组合。
考虑一下:
String s = "\u0000";
s.trim().isBlank()
\u0000 是 Unicode 值,控制台输出是 space
Stream.of("\u0000","[=10=][=10=]","jack", "luca")
.filter(s -> !s.trim().equals(""))
.forEach(System.out::println);
输出:
jack
luca
您可以使用正则表达式
匹配一个或多个\u0000
boolean onlyNulls = string.matches("\u0000+"); // or "[=10=]+"
使用*
代替+
来匹配空字符串
(Sweeper 的流 是我的首选解决方案 - 恕我直言,它更类似于预期的任务,尽管我会使用 '\u0000'
而不是 0
)
我认为没有预定义的方法来检查它,我认为你提到的第二种方法是正确的测试方法
检查字符串是否仅包含空字符的正确方法是什么?
String s = "\u0000";
if(s.charAt(0) == 0) {
System.out.println("null characters only");
}
或
String s = "[=11=][=11=]";
for(int i = 0; i < s.length(); i++) {
if(s.charAt(i) == 0)
continue;
else break;
}
两者都有效。但是有没有更好更简洁的方法来执行这个检查。是否有实用程序来检查 java 中的字符串是否仅包含 null
字符(\u0000
或 [=13=]
)?
'[=14=]'
和'\u0000'
有什么区别?
一个char
文字(在Java中)可以有多种写法(所有这些都是等价的)。例如,
System.out.println('\u0000' == '[=10=]');
System.out.println('\u0000' == 0);
会输出
true
true
因为char
是Java中的16位整数类型。 \u0000
、[=16=]
和 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!
}
您可以使用现有的字符串方法,例如
trim
和 isEmpty
的组合。
考虑一下:
String s = "\u0000";
s.trim().isBlank()
\u0000 是 Unicode 值,控制台输出是 space
Stream.of("\u0000","[=10=][=10=]","jack", "luca")
.filter(s -> !s.trim().equals(""))
.forEach(System.out::println);
输出:
jack
luca
您可以使用正则表达式
匹配一个或多个\u0000
boolean onlyNulls = string.matches("\u0000+"); // or "[=10=]+"
使用*
代替+
来匹配空字符串
(Sweeper 的流 '\u0000'
而不是 0
)
我认为没有预定义的方法来检查它,我认为你提到的第二种方法是正确的测试方法