这是StackOverflow中对以下问题的扩展,因为我不理解接受的答案。
How do you determine the type of data contained in a string?
如果有人可以请提供以下案例的示例代码:
我有一个String数组如下:
String[] myArray = new String[4];
myArray[0] = "one";
myArray[1] = "2012-02-25";
myArray[2] = "12345.58";
myArray[3] = "1245";
我想要的东西如下:
for(String s:myArray){
if(s is a number){
System.out.println("A number!");
}
else if(s is a float){
System.out.println("A float!");
}
else if(s is a date){
System.out.println("A date!");
}
else if(s is a text){
System.out.println("A text!");
}
}
但我不知道在IF条件中会出现什么来确定给定String中的数据类型。
感谢阅读!
答案 0 :(得分:2)
最简单的方法是创建一个前面提到的方法,只需尝试解析字符串(但你必须记住,你不能告诉100%某个模式是什么数据类型,可以一次多次):
public static boolean isANumber(String s) {
try {
BigDecimal d = new BigDecimal(s);
return true;
} catch (Exception e) {
return false;
}
}
public static boolean isAFloat(String s) {
//same as number, unless you want is a number to
//check if it an integer or not
try {
BigDecimal d = new BigDecimal(s);
return true;
} catch (Exception e) {
return false;
}
}
public static boolean isADate(String s) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
try {
sdf.parse(s);
return true;
} catch (Exception e) {
return false;
}
}
public static boolean isAText(String s) {
//everything could be considered a text
// unless you want to check that characters are within some ranges
return true;
}
答案 1 :(得分:1)
public static void main(String[] args) {
String[] myArray = new String[4];
myArray[0] = "one";
myArray[1] = "2012-02-25";
myArray[2] = "12345.58";
myArray[3] = "1245";
for(String str : myArray){
if(str.matches("[\\d]+")){
System.out.println(str + " is integer");
}
else if(str.matches("[\\D]+")){
System.out.println(str + " is word");
}
else if(str.matches("[\\d.]+")){
System.out.println(str + " is double");
}
else if(str.matches("\\d{4}-\\d{2}-\\d{2}")){
System.out.println(str + " is date");
}
}
}
输出:
one is word
2012-02-25 is date
12345.58 is double
1245 is integer
答案 2 :(得分:1)
for(String s:myArray){
if(NumberUtils.isNumber(s)){ //From Apache commons
double d= Double.valueOf(s);
if (d==(int)d){
System.out.println("A number!");
}else{
System.out.println("A Float!");
}
}else if(isValidDate(s)){
System.out.println("A date!");
}else{
System.out.println("A text!");
}
}
有效日期检查的方法
public static boolean isDateValid(String date)
{
try {
DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
df.parse(date);
return true;
} catch (ParseException e) {
return false;
}
}
答案 3 :(得分:1)
写函数如:
private boolean isFloat(String str) {
try {
Float.parseFloat(str);
return true;
} catch (NumberFormatException) {
return false;
}
}
并检查类型。或者你可以使用apache commons NumberUtils
答案 4 :(得分:1)
一种方法是尝试解析字符串。 以下是其中一种类型的示例;
boolean isFloat(String x) {
try {
Float.parseFloat(x);
} catch (Throwable e) {
return false;
}
return true;
}
注意:强>
由于整数可以解析为浮点数,因此需要先测试它是否为整数。 所以:
if (isInteger(s)) {
// Integer
else if (isFloat(s)) {
...
答案 5 :(得分:0)
无法使用特定数据类型的声明定义字符串数组。如果您需要类似的东西,请使用像List这样的集合,例如:日期对象列表。对于字符串,您必须通过分析数据以编程方式确定它,或者如果您已经知道程序中包含字符串或字符串数组的数据类型,因为您是编写它的人,然后相应地处理。
您可以创建一个自定义对象/类,它可以获取值所代表的数据的值和类型。