确定是字符串是整数或双精度字符串

时间:2016-03-09 15:18:29

标签: java

是否有一种有效/干净的方法来确定String是否包含一系列可以解释为的字符:a)整数b)双c)如果a或b不适用那么它是一个字母数字?

5 个答案:

答案 0 :(得分:4)

是。您可以使用方法:

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");
}

答案 1 :(得分:2)

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

所以你有两个选择:

  1. 不要使用区域设置

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

    • 使用模式检查或NumberFormat

答案 2 :(得分:1)

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

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等)。顺便说一句,Java自己的十进制解析器非常intense

答案 3 :(得分:0)

if ((variable == Math.floor(variable)) && !Double.isInfinite(variable)) {
    // ...
}

答案 4 :(得分:0)

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

注意:对于bigintegers也会返回

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