Javastring – 查看一个string是否只包含数字而不是字母

我有一个string,我加载在我的应用程序,它从数字更改为字母等。 我有一个简单的if语句来查看它是否包含字母或数字,但有些东西不能正常工作。 这是一个片段。

 String text = "abc"; String number; if (text.contains("[a-zA-Z]+") == false && text.length() > 2) { number = text; } 

尽pipetextvariables确实包含字母,但条件返回为true 。 和&&应该被看作是两个条件必须是true的才能处理number = text;

==============================

解:

我能够解决这个问题,通过使用下面的代码提供了对这个问题的评论。 所有其他post也是有效的!

我用过的那个工作来自第一个评论。 虽然提供的所有示例代码似乎也是有效的!

 String text = "abc"; String number; if (Pattern.matches("[a-zA-Z]+", text) == false && text.length() > 2) { number = text; } 

如果您将以文本forms处理该数字,请更改:

 if (text.contains("[a-zA-Z]+") == false && text.length() > 2){ 

至:

 if (text.matches("[0-9]+") && text.length() > 2) { 

而不是检查string包含字母字符,检查确保它只包含数字。

如果你真的想要使用数值,可以使用Integer.parseInt()或者Double.parseDouble()正如其他人已经解释过的那样。


作为一个方面的说明,通常认为比较布尔值与truefalse是不好的做法。 只要使用if (condition)if (!condition)

您也可以使用Apache Commons中的NumberUtil.isNumber(String str)

这是我将如何做到这一点:

 if(text.matches("^[0-9]*$") && text.length() > 2){ //... } 

$将避免部分匹配,例如; 1B

在Java中有很多工具可以从String获取数字(反之亦然)。 你可能想跳过正则expression式部分,以避免复杂的。

例如,您可以尝试查看Double.parseDouble(String s)为您返回的内容。 如果在string中找不到合适的值,它应该抛出一个NumberFormatException 。 我会build议这种技术,因为你实际上可以使用由String表示的值作为数字types。

 import java.util.*; class Class1 { public static void main(String[] argh) { boolean ans = CheckNumbers("123"); if (ans == true) { System.out.println("String contains numbers only"); } else { System.out.println("String contains other values as well"); } } public static boolean CheckNumbers(String input) { for (int ctr = 0; ctr < input.length(); ctr++) { if ("1234567890".contains(Character.valueOf(input.charAt(ctr)).toString())) { continue; } else { return false; } } return true; } } 

你可以使用Regex.Match

 if(text.matches("\\d*")&& text.length() > 2){ System.out.println("number"); } 

或者你可以像Integer.parseInt(String)或更好的Long.parseLong(String)使用更大的数字,例如:

 private boolean onlyContainsNumbers(String text) { try { Long.parseLong(text); return true; } catch (NumberFormatException ex) { return false; } } 

然后testing:

 if (onlyContainsNumbers(text) && text.length() > 2) { // do Stuff } 

这段代码已经写好了。 如果你不介意(非常)小的性能命中 – 这可能不比做正则expression式匹配更糟 – 使用Integer.parseInt()或Double.parseDouble() 。 如果一个string只是数字(或者是一个数字,那么会马上告诉你)。 如果您需要处理更长的string,则BigInteger和BigDecimal体育构造函数接受string。 如果你尝试传递一个非数字(当然是基于你select的整数或小数),任何这些都会抛出一个NumberFormatExceptionexception 。 或者,根据您的要求,只需迭代string中的字符并检查Character.isDigit()和/或Character.isLetter() 。

boolean isNum = text.chars()。allMatch(c – > c> = 48 && c <= 57)

下面的正则expression式可以用来检查一个string是否只有数字:

if (str.matches(".*[^0-9].*")) or if (str.matches(".*\\D.*"))

如果String包含非数字,则上述两个条件都将返回true 。 在false ,string只有数字。