5

检查字符串是否仅包含空字符的正确方法是什么?

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中的字符串是否只包含空字符(\u0000OR \0)?

'\0'和和有什么区别'\u0000'

4

6 回答 6

9

文字(在charJava 中)可以用多种方式编写(所有这些方式都是等价的)。例如,

System.out.println('\u0000' == '\0');
System.out.println('\u0000' == 0);

将输出

true
true

因为 achar是 Java 中的 16 位整数类型。并且所有三个\u0000,\00都是相同的值。至于查找 a 是否String仅包含0 char值 - 只需迭代它。像,

boolean allNulls = true;
for (int i = 0; i < s.length(); i++) {
    if (s.charAt(i) != 0) {
        allNulls = false;
        break;
    }
}
于 2021-05-13T02:34:23.263 回答
5

你可以得到chars()as IntStream,然后使用allMatch

if (yourString.chars().allMatch(x -> x == 0)) {
    // all null chars!
}
于 2021-05-13T02:36:39.273 回答
3

您可以使用正则表达式

匹配一个或多个\u0000

boolean onlyNulls = string.matches("\u0000+");  // or "\0+"

使用*而不是+也匹配空字符串


(Sweeper 的流解决方案是我的首选解决方案 - 恕我直言,它更类似于预期的任务,尽管我会使用'\u0000'而不是0

于 2021-05-13T08:28:12.617 回答
0

我认为没有预定义的方法来检查它,我认为你提到的第二种方法是正确的测试方法

于 2021-05-18T10:08:46.723 回答
-1

您可以为此使用现有的 String 方法,例如 trimisEmptywith 组合。考虑一下:

String s = "\u0000";
s.trim().isBlank()
于 2021-05-13T02:38:57.763 回答
-1

\u0000 是 Unicode 值,控制台输出是空格

Stream.of("\u0000","\0\0","jack", "luca")
  .filter(s -> !s.trim().equals(""))
  .forEach(System.out::println);

输出:

jack
luca
于 2021-05-13T02:57:23.623 回答