如何最好地确定一个字符串是否只包含空字符?

问题描述

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

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\00 这三个都是相同的值。至于查找 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 方法,例如 trimisEmpty 结合使用。 考虑一下:

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