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

时间:2012-07-12 08:10:19

标签: java variables

我有一个接受String参数的方法。

String可以包含整数,long,double,boolean或只是普通的旧字符和数字。

我需要一种简单的方法来确定字符串的类型。

一种方法可能是拥有一堆try catch块并尝试将其解析为每种类型,如果抛出异常,那么它可能不是那种数据类型。这似乎是错误的,因为它是一种启发式方法,而不是一种确定性方案。

4 个答案:

答案 0 :(得分:2)

我认为通常假设您需要知道它是什么 - 通常这些参数是已知的或带有一些元数据。您总是可以使用正则表达式来查找数字和句号等标记。

有用的模式:

Pattern.compile("(?:\\+|\\-)?\\d+\\.\\d+");` // Matches a double.
Pattern.compile("(?:\\+|\\-)?\\d{numberOfDigitsBeforeYouWantToCallItALong,}"); // Matches longs.
Pattern.compile("(?:\\+|\\-)?\\d{,numberOfDigitsBeforeYouWantToCallItALongMinusOne}"); // Matches ints.
Pattern.compile("true|false|t|f|yes|no|y|n"); // Matches booleans.

其他一切都是字符串。

编辑:从您的编辑中我看到您已经添加了它的使用方式,您可以使用"(?:\\+|\\-)?\\d+"来检测数字,如果您的目标类型是int或long,请接受它并将其解析为目标类型而不是基于位数。或者您可以尝试直接解析为适当的类型并捕获Exception,因为您知道预期的类型。

答案 1 :(得分:1)

如果你知道参数后知道应该的类型是什么,那么将字符串解析为该类型并捕获异常就可以了 - 这是适当使用异常来捕获无效数据(如只要你只尝试一种类型......)

答案 2 :(得分:0)

只有3种特殊情况:真,假和数字。只检查字符串是否为“true”,然后检查它是否为“false”,然后使用Double.parseDouble()(因为long可以放在double中)。如果它不等于true或false,并且Double.parseDouble抛出异常,那么它只是一个字符串

答案 3 :(得分:-1)

您可以使用Scanner类吗?

String input = "1 fish 2 fish red fish blue fish";
Scanner s = new Scanner(input).useDelimiter("\\s*fish\\s*");
System.out.println(s.nextInt());
System.out.println(s.nextInt());
System.out.println(s.next());
System.out.println(s.next());
s.close(); 

输出

1
2
Red
Blue

可能复杂或者你想要的东西