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

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

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

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

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

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

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

实用模式:

 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. 

其他一切都是String。

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

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

你能用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 

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