繁体   English   中英

检查字符串是否可解析为另一种 Java 类型

[英]Check if a string is parsable as another Java type

我试图找到一种方法来检查字符串是否可解析为特定类型。

我的用例是:

  • 我有一个从字段(名称和类型)映射创建的动态 html 表单

  • 在我的控制器中,我从 http 请求中获取表单值作为字符串

  • 我想检查检索到的字符串是否可以解析为所需的类型,以便在不可能的情况下在表单中显示错误消息。

有人知道一种检查解析是否可行的方法,而无需逐一测试每种类型吗? (双精度、整数、日期、BigDecimal 等)

我正在 Java 或第三方库中寻找类似的东西:

myString.isParsableAs(Class<?> wantedType)

谢谢您的帮助 !

制作从ClassPredicate的映射,并使用它来为您的类获取“测试器对象”。 下面是一个例子:

static Map<Class<?>,Predicate<String>> canParse = new HashMap<>();
static {
    canParse.put(Integer.TYPE, s -> {try {Integer.parseInt(s); return true;} catch(Exception e) {return false;}});
    canParse.put(Long.TYPE, s -> {try {Long.parseLong(s); return true;} catch(Exception e) {return false;}});
};

您现在可以检索该类的谓词,并测试您的字符串,如下所示:

if (canParse.get(Long.TYPE).test("1234567890123")) {
    System.out.println("Can parse 1234567890123");
} else {
    System.out.println("Cannot parse 1234567890123");
}

您不必浏览整个测试人员列表; 检查只会对您要测试的类型进行。

演示。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM