问题

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

String text = "abc"; 
String number; 

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

虽然text变量确实包含字母,但条件返回为true。 and&&应该评估为两个条件必须是true才能处理number = text;

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

解:

我能够通过使用此问题的评论提供的以下代码来解决这个问题。所有其他帖子也有效!

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

String text = "abc"; 
String number; 

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

#1 热门回答(269 赞)

如果你要将数字作为文本处理,请更改:

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

至:

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

而不是检查字符串是否不包含字母字符,检查以确保它包含ononumerics。

如果你确实想要使用数值,请使用Integer.parseInt()Double.parseDouble(),其他人已在下面说明。

作为旁注,将布尔值与truefalse进行比较通常被认为是不好的做法。只需使用if (condition)if (!condition)


#2 热门回答(20 赞)

你也可以使用Apache Commons的NumberUtil.isCreatable(String str)


#3 热门回答(8 赞)

我就是这样做的:

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

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


原文链接