0

这是 StackOverflow 中以下问题的扩展,因为我不理解接受的答案。

如何确定字符串中包含的数据类型?

如果有人可以请提供以下案例的示例代码:

我有一个字符串数组,如下所示:

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 条件中会出现什么来确定给定字符串中的数据类型。

谢谢阅读!

4

6 回答 6

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;
}
于 2013-09-23T10:27:17.457 回答
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
于 2013-09-23T10:24:41.797 回答
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;
   }
}
于 2013-09-23T10:24:48.270 回答
1

编写函数如:

private boolean isFloat(String str) {
    try {
        Float.parseFloat(str);
        return true;
    } catch (NumberFormatException) {
        return false;
    }
}

并检查类型。或者你可以只使用 apache commonsNumberUtils

于 2013-09-23T10:25:47.943 回答
1

一种方法是尝试解析字符串。以下是其中一种类型的示例;:

boolean isFloat(String x) {
  try {
    Float.parseFloat(x);
  } catch (Throwable e) {
    return false;
  }
  return true;
}

笔记:

由于可以将整数解析为浮点数,因此您需要先测试它是否为整数。所以:

if (isInteger(s)) {
   // Integer
else if (isFloat(s)) {
...
于 2013-09-23T10:26:12.397 回答
0

无法使用特定数据类型的声明来定义字符串数组。如果您需要类似的东西,请使用 List 之类的集合,例如日期对象列表。对于字符串,您必须通过分析数据以编程方式确定它,或者如果您已经知道字符串数组或字符串在程序中包含什么类型的数据,因为您是编写它的人,然后进行相应处理。

您可以创建一个自定义对象/类,它可以采用值表示的数据的值和类型。

于 2013-09-23T10:21:10.763 回答