How do I check that a Java String is not all whitespaces?

Ank*_*kur 125 java string whitespace

I want to check that Java String or character array is not just made up of whitespaces, using Java?

这是一个非常相似的问题,除了它的Javascript:
如何检查字符串是否包含字符和空格,而不仅仅是空格?

编辑:我删除了关于字母数字字符的位,所以它更有意义.

Car*_*icz 214

我能想到的最短的解决方案:

if (string.trim().length() > 0) ...
Run Code Online (Sandbox Code Playgroud)

这仅检查(非)空白区域.如果要检查特定的字符类,则需要使用match()带有正则表达式的强大,例如:

if (string.matches(".*\\w.*")) ...
Run Code Online (Sandbox Code Playgroud)

...检查至少一个(ASCII)字母数字字符.

  • FWIW:我希望第一个解决方案要快得多. (8认同)
  • @Stephen C:绝对!但正如@Uri指出的那样,由于问题含糊不清,我不得不解决两个不同的问题:)另外,我很少使用`matches()`:为了性能,我通常将`Pattern`存储在`final中static`.如果相同的代码经常运行,则支付. (2认同)
  • @Andreas_D:嘿,我收到了订单!OP表示他想检查一个字符串或字符数组,他从来没有说过任何有关空值的内容!:)\*检查合同中的细则\*"`null`不是字符串!" (2认同)
  • 我使用了 your_string.trim().isEmpty() 并为我完成了这项工作 (2认同)

Chr*_*s J 55

我会使用Apache Commons Lang库.它有一个名为StringUtils的类,可用于各种String操作.要检查String是否不是所有空格,可以使用以下内容:

StringUtils.isBlank(<your string>)
Run Code Online (Sandbox Code Playgroud)

这是引用:StringUtils.isBlank

  • 与使用所选答案相比,我更喜欢这种解决方案.这也将检查string == null (8认同)

小智 47

比Carl Smotricz提到的略短:

!string.trim().isEmpty();
Run Code Online (Sandbox Code Playgroud)

  • 你年轻的whippersnappers和你的新奇的后Java-1.6技巧!说真的,我公司中至少有一个项目仍在Java 1.4(叹气)上运行. (10认同)

Pyv*_*ves 10

如果您使用的是Java 11或更新版本,新的isBlank字符串方法将派上用场:

!s.isBlank();
Run Code Online (Sandbox Code Playgroud)

如果您使用的是Java 8、9 或 10,您可以构建一个简单的流来检查字符串是否仅是空格:

!s.chars().allMatch(Character::isWhitespace));
Run Code Online (Sandbox Code Playgroud)

除了不需要任何第三方库(例如 Apache Commons Lang)之外,这些解决方案还具有处理任何空白字符的优势,而不仅仅是' 'trim许多其他答案中建议的基于 - 的解决方案那样处理纯空格。您可以参考Javadocs以获取所有支持的空白类型的详尽列表。请注意,这两种情况也包括空字符串。


And*_*s_D 5

这个答案更多地集中在旁注“即具有至少一个字母数字字符”。除此之外,它不会给其他(早期的)解决方案添加太多内容,除非在字符串为 .NPE 的情况下不会对您造成伤害null

我们想要知道false(1) s 是否为空null或 (2) s 为空或 (3) s 仅包含白色字符。

public static boolean containsNonWhitespaceChar(String s) {
  return !((s == null) || "".equals(s.trim()));
}
Run Code Online (Sandbox Code Playgroud)


Rob*_*sch 5

if(target.matches("\\S")) 
    // then string contains at least one non-whitespace character
Run Code Online (Sandbox Code Playgroud)

注意使用反斜杠-S,意思是"非空白字符"

我打赌这是最简单的(也许是最快的?)解决方案.

  • 不,你是对的,虽然我无法解释原因.根据Java文档,String.matches检查给定的字符串是否与正则表达式匹配.一些实验表明这并不完全准确,因为如果提供的正则表达式与ENTIRE字符串匹配,此函数似乎只匹配!因此,将上面的正则表达式("\\ S")更改为"^.*\\ S.*$"将按预期工作,但此行为未正确记录,并且似乎与字符串匹配的其他所有实现大不相同使用正则表达式. (6认同)
  • 让我们试试:`String year="1995"; year.matches("\\S"); 将返回 false` 所以这不是正确的解决方案。:| (2认同)

Aru*_*run 5

如果您只检查空格而不关心 null 那么您可以使用 org.apache.commons.lang.StringUtils.isWhitespace(String str),

StringUtils.isWhitespace(String str);

(检查字符串是否仅包含空格。)

如果您还想检查 null(包括空格),那么

StringUtils.isBlank(String str);
Run Code Online (Sandbox Code Playgroud)