Javastring – 查看一个string是否只包含数字而不是字母
我有一个string,我加载在我的应用程序,它从数字更改为字母等。 我有一个简单的if
语句来查看它是否包含字母或数字,但有些东西不能正常工作。 这是一个片段。
String text = "abc"; String number; if (text.contains("[a-zA-Z]+") == false && text.length() > 2) { number = text; }
尽pipetext
variables确实包含字母,但条件返回为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()
正如其他人已经解释过的那样。
作为一个方面的说明,通常认为比较布尔值与true
或false
是不好的做法。 只要使用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只有数字。