Java 确定字符串是整数、双精度还是普通字符串

Java 确定字符串是整数、双精度还是普通字符串,java,Java,是否有一种有效/干净的方法来确定字符串是否包含可以解释为以下内容的字符序列:a)整数b)双精度c)如果a或b不适用,则它是字母数字?是。您可以使用以下方法: String text = "1000"; try { Integer.valueOf(text); } catch (NumberFormatException ex) { System.out.println("not integer"); } try { Double.valueOf(text); } catc

是否有一种有效/干净的方法来确定
字符串
是否包含可以解释为以下内容的字符序列:a)整数b)双精度c)如果a或b不适用,则它是字母数字?

是。您可以使用以下方法:

String text = "1000";
try {
    Integer.valueOf(text);
} catch (NumberFormatException ex) {
    System.out.println("not integer");
}
try {
    Double.valueOf(text);
} catch (NumberFormatException ex) {
    System.out.println("not double");
}

这取决于您是否要支持区域设置

所以你有两个选择:

  • 不要使用区域设置

    • 只需尝试Integer.parseInt和Double.parseDouble
  • 检查特定的区域设置/语言

    • 使用模式检查或数字格式

  • 假设您的数字是以通常的编程语言形式编写的(例如,十进制分隔符是点等),您可以尝试使用正则表达式:

    import java.util.regex.Pattern;
    
    class Test {
    
      private static String typeOfThing(String text) {
        if (Pattern.matches("[+-]?[0-9]+", text)) {
          return "integer";
        } else if (Pattern.matches("[+-]?(([0-9]+\\.[0-9]+)|([0-9]+(\\.[0-9]+)?e[+-]?[0-9]+))", text)) {
          return "double";
        } else return "other";
      }
    
      public static void main(String[] args) {
        System.out.println(typeOfThing("+123")); // integer
        System.out.println(typeOfThing("123"));  // integer
        System.out.println(typeOfThing("-123")); // integer
        System.out.println(typeOfThing("123.456")); // double
        System.out.println(typeOfThing("-1.123e-10")); // double
        System.out.println(typeOfThing("123hello")); // other
      }
    }
    

    以上只是概念证明,它涉及科学符号,但可能缺少一些边缘情况(例如
    NaN
    s等)。顺便说一句,Java自己的十进制解析器非常漂亮。

    使用它可以知道给定的字符串是否为整数

    注意:对于大整数,它也将返回true

    entered_string.matches("\\d+")
    
    要知道输入的字符串是否为float,请尝试以下操作

      Pattern p = Pattern.compile("^[-+]?[0-9]*\\.?[0-9]+$");
      Matcher m = p.matcher(entered_string);
    
    如果您想知道给定的字符串是否只是一个字符串,请尝试以下操作

      Pattern p = Pattern.compile("^[a-zA-Z]*$");
      Matcher m = p.matches(entered_string);//as you requested for plain text
    

    @Jim Integer.valueof(..),Double.valueof(..)@Jens:我知道如何将字符串转换为整数或双精度。我在问如何确定字符串包含的序列是有效的整数还是双精度序列。有一些选项:Apache Commons中的NumberUtils.isNumber、regex和try parse序列,然后尝试另一种类型。如果您的意思是“字符串是否包含任何数字子序列”,那么这就像“字符串是否包含任何数字”一样简单。在正则表达式中,一个数字是
    \\d
    。@Jim您希望如何对一个像1后跟50个零的数字进行分类?它在数学上是一个整数,但Java不能将其表示为int。它可以表示为BigInteger或double。您还需要在例如123.456e+123中允许a+。当然,问题不清楚的是,他问的是字符串在词汇上是整数还是双精度,或者它是否能够真正适合于Integer或Double这两种Java类型。
      Pattern p = Pattern.compile("^[a-zA-Z]*$");
      Matcher m = p.matches(entered_string);//as you requested for plain text