0

我敢肯定,这已经被问了一百万次了,但是就这样吧。

我试图在java中获取一个字符串值并解析或转换,我不确定这个术语,它是适当的数据类型。我尝试了很多搜索,但我找不到可能是我不知道正确术语的答案。我出现的所有搜索都涉及使用诸如 XML 或自动装箱之类的东西,这与我想要的东西并不接近。

例如,用户输入可能是 int、char 或 double(例如 12.0),但它在代码中被捕获为字符串。可以这么说,我如何将它放入正确的桶中?我不知道为什么我找不到一个简单的答案。

编辑:我了解下面的 Integer.parseInt() 等,但我想知道如何在运行时通过使用 switch 或 if-else 语句检查适当的类型

4

2 回答 2

3

如果用户在键盘上输入一些东西,它是一个字符序列,即一个字符串,所以这就是你得到的。现在,可以将该字符串解释为数字、URL 或任何其他类型。

如果您知道期望什么样的输入,您可以使用该特定类型的解析函数,例如Integer.parseInt(String).

但是,没有通用的方法来回答“这个字符串代表什么类型”这个问题,因为可能性是无限的。字符串“1”可能旨在表示一个整数,或者它可能只是一个字符串,或者它可能是一个表示 unix 纪元后一毫秒的日期。

如果您将自己限制为几种不同的可能性,您当然可以编写一个函数Object parse(String),将字符串转换为具有不重叠字符串表示的几种可能类型之一 - 例如 Integer、Float、Double、Bool、Date(带有特定格式)或如果没有匹配项则回退到字符串。但是,这很少有用,并且您需要支持的类型范围很可能仍然取决于您的应用程序,因此您仍然必须推出自己的解决方案。它可能看起来像这样:

Object myParse(String str) {
    try {
        return Integer.valueOf(str);
    } catch(NumberFormatException e) {
        // Not an Integer, try the next one
    }

    try {
        return Double.valueOf(str);
    } catch(NumberFormatException e) {
        // Not a Double, try the next one
    }

    try {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        return sdf.parse(str);
    } catch(ParseException e) {
        // Not a Date in format yyyy-MM-dd
    }

    throw new IllegalArgumentException("No matching format found.");
}

最后,您的 String 输入可能是已知的 contianer 格式,它表示值的类型及其字符串表示形式 - 例如对于 XML 格式:<Integer>1</Integer>. 这将允许您从字符串中获取明确键入的值,但它确实要求字符串遵循特定的容器格式。

于 2013-04-18T22:43:11.133 回答
1

用户输入可以是 int、char 或 double,例如 12.0。

如果输入确实是未知的,那么您将在转换输入时遇到问题。例如,“1”(不带引号)是 char 还是 int?

每种输入类型都有自己的转换。例如:

String s = "test string";

char c = s.charAt(0);
int i = Integer.parseInt(s);
double d = Double.parseDouble(s);

如果字符串分别不是 int 或 double,您将获得 NumberFormatException。

于 2013-04-18T22:30:14.653 回答