当前位置: 首页 > 面试题库 >

Java如何检查字符串值是否是给定Class的类型

赫连越
2023-03-14
问题内容

好吧,这是一个复杂的问题,我完全迷失了。

假设您有一个字符串和一个通用类。像这样。

String string;
Class<?> clazz;

您将如何检查String是否表示该类可以相等的值。

例如,可以这样说:

String string = "true";
Class<?> clazz = Boolean.class;

如何检查字符串“ true”实际上是布尔值?

这是另一个例子。可以这样说:

String string = "true";
Class<?> clazz = Integer.class;

如何检查字符串“ true”不是整数?


问题答案:

鉴于您只需要 Wrapper Types ,可以在此处使用一些反射技巧(为简洁起见,忽略无关代码的异常处理):

String string = "ABC";
Class<?> clazz = Integer.class;

Method method = clazz.getDeclaredMethod("valueOf", String.class);

if (method != null) {
    try {
        Object obj = method.invoke(null, string);       
        System.out.println("Success : " + obj);

    } catch (InvocationTargetException ex) {
        System.out.println("Failure : " + string + " is not of type " + 
                                          clazz.getName());
    }
}

我考虑到以下事实:每个包装器类都有一个 静态
valueOf方法,该方法采用typehtml" target="_blank">参数String,并返回该wrapper类型的值。如果参数不能转换为相应的包装器类型,则抛出异常。

因此,在上述情况下,如果引发异常,则该string值不是clazz类型。

PS: 请注意,对于Boolean.class,任何不是的字符串都"true"将被视为 false



 类似资料:
  • 如何以更简单的方式检查字符串是否与给定选项之一匹配?

  • 我用Json创建了一个数据库。我解析了这个数据库,并让代码遍历一个包含几个Json对象的Json数组。最后,我也在遍历Json对象中的值。我的问题是我需要检查迭代器所在的值是字符串还是数组。 谷歌似乎只有检查字符串中是否有数字或该问题的其他变体之类的事情。 所以,这些问题似乎对我想要的东西没有多大帮助。有一个案例与我的非常相似,但它处理的是原始数据类型,所以我处理字符串的案例不起作用。(这里是另一

  • 问题内容: 这是我的问题-我正在寻找(如果存在的话)等效于的枚举。 这是我的代码问题的一个示例: 现在,我意识到,使用of 是最好的方法,但是我必须通过其他地方的开关/案例来运行我的枚举内容。因此,我的问题。 假设这样的事情不存在,我该怎么做呢? 问题答案: 应该这样做: 这样,您不必担心以后再添加其他枚举值,它们都已选中。 编辑: 如果枚举很大,则可以将值粘贴在HashSet中: 然后,您可以做

  • 问题内容: 我有两个字符串,我想检查第一个是否是另一个的子字符串。Python是否具有这样的内置功能? 问题答案: 尝试像这样使用:

  • 问题内容: 如何在Java中验证JSON字符串?还是可以使用正则表达式解析它? 问题答案: 一个疯狂的主意,尝试解析它并捕获异常: 该代码使用org.json JSON API实现,该实现在github,maven和部分Android上可用。

  • 问题内容: 我正在尝试检查字符串是否以开头。我该如何检查? 问题答案: 使用 substr 函数返回字符串的一部分。 如果您要确保它不是另一个协议。我会改用https,因为https也可以匹配,例如http-protocol.com。 一般而言: