java - 有没有办法使用 anyNonEmptyString 而不是 anyString
问题描述
我正在尝试使用多个参数来模拟 Java 方法。参数之一是字符串。在我的程序运行时,String 可以采用许多值,但它不能为 null 或空白(它必须至少包含一个非空白字符)。
在这里使用 anyString() 是不够的。模拟 MyClass.bar() 之类的方法(如下所示)的好方法是什么?
public class MyClass {
public Foo bar(String str, int myInt) {
assert(!str.isBlank());
return new Foo(str, myInt);
}
}
抱歉,该示例是人为设计的 - 仅用于说明目的。
解决方案
正则表达式是你的朋友。'\s' 字符测试空格,而 '\S' 命令测试非空格。Matcher 命令find
将搜索所有字符并在任何匹配正则表达式时返回 true。您将需要 Java.util.regex 包中的模式和匹配器类。
Pattern p = Pattern.compile("\\S");
Matcher m = p.matcher(str);
m.find();
/*
Will return true if and only if the string str contains a non-whitespace character.
Otherwise, returns false.
*/
请注意,一个简单的替代方法是从字符串中删除所有空格,然后检查长度是否不为 0。str.replaceAll("\\s+","").length() == 0
如果字符串只是空格,则返回 true。正则表达式中的加号是可选的,没有它会运行得更快一些,除非字符串包含很多空白字符。
推荐阅读
- angular - 如何制作一个可以不断创建、更新、删除和编辑数据的角度数据表组件?
- flutter - 在颤动中传递资产图像时显示错误
- python - Python类 - 从父类继承属性到顶层
- javascript - 如何阻止 div 在第一页加载时意外加载?
- scala - 当我尝试从弧度/度数转换时,为什么 Scala 会这样做,反之亦然?
- html - 将变量标记为 Django 模板中的 HTML 类(或 div)名称
- assembly - r8-15 寄存器编码的“X”部分是什么?
- swiftui - IOS 14 将 ObservedObject 添加到 var 导致视图不会出现在 iPhone 上
- pysimplegui - 如何在 PySimpleGUI 中将代码与窗口集成
- javascript - 如何让手风琴兼容IE9?