如果用户在键盘上输入一些东西,它是一个字符序列,即一个字符串,所以这就是你得到的。现在,可以将该字符串解释为数字、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>
. 这将允许您从字符串中获取明确键入的值,但它确实要求字符串遵循特定的容器格式。