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