是否有一种有效/干净的方法来确定String
是否包含一系列可以解释为的字符:a)整数b)双c)如果a或b不适用那么它是一个字母数字?
答案 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)
这取决于您是否要支持区域设置。
所以你有两个选择:
不要使用区域设置
检查特定的区域设置/语言
答案 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