我有一个接受String参数的方法。
String可以包含整数,long,double,boolean或只是普通的旧字符和数字。
我需要一种简单的方法来确定字符串的类型。
一种方法可能是拥有一堆try catch块并尝试将其解析为每种类型,如果抛出异常,那么它可能不是那种数据类型。这似乎是错误的,因为它是一种启发式方法,而不是一种确定性方案。
答案 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
可能复杂或者你想要的东西