确定String中包含的数据类型

时间:2013-09-23 10:17:29

标签: java string

这是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中的数据类型。

感谢阅读!

6 个答案:

答案 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这样的集合,例如:日期对象列表。对于字符串,您必须通过分析数据以编程方式确定它,或者如果您已经知道程序中包含字符串或字符串数​​组的数据类型,因为您是编写它的人,然后相应地处理。

您可以创建一个自定义对象/类,它可以获取值所代表的数据的值和类型。