我在应用程序中加载了一个字符串,它可以从数字变成字母等等。我有一个简单的if语句,看看它是否包含字母或数字,但是,有些东西不太正确。下面是一个片段。

String text = "abc"; 
String number; 

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

虽然文本变量包含字母,但条件返回为true。和&&应该eval作为两个条件都必须为真,以便处理number =文本;

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

解决方案:

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

我使用的有效方法来自第一条评论。尽管提供的所有示例代码似乎也是有效的!

String text = "abc"; 
String number; 

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

当前回答

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

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

to:

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

与其检查字符串不包含字母字符,不如检查它是否只包含数字。

如果你真的想使用数值,请使用Integer.parseInt()或Double.parseDouble(),如下所述。


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

其他回答

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

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

to:

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

与其检查字符串不包含字母字符,不如检查它是否只包含数字。

如果你真的想使用数值,请使用Integer.parseInt()或Double.parseDouble(),如下所述。


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

boolean flag = false;
        System.out.print("Enter String : ");
        String str = new Scanner(System.in).next();

        for (int i = 0; i < str.length(); i++)
        {
            if (str.length() <= 0)
            {
                System.out.println("String length Can't be zero.");
                return;
            }
            char ch = str.charAt(i);
            int c = ch;
            if (c >= 48 && c <= 58)
            {
                flag = true;
            } else
            {
                flag = false;
                break;
            }
        }
        if (flag)
        {
            System.out.println("input [" + str + "] contains number only.");
        } else
            System.out.println("input [" + str + "] have some non string values in it.");

在这样的典型场景中涉及任何异常抛出/处理是一种糟糕的实践。 因此,parseInt()不是很好,但regex是一个优雅的解决方案,但要注意以下几点: 分数 消极的数字 -十进制分隔符可能因国家而异(例如:','或'。') -有时允许使用所谓的千位分隔符,如空格或逗号,例如12324,1000.355

要处理应用程序中所有必要的情况,您必须小心,但是这个正则表达式涵盖了典型的场景(正/负和分数,用一个点分隔):^[-+]?\d*.?美元\ d + 对于测试,我推荐regexr.com。

Character first_letter_or_number = query.charAt(0);
                //------------------------------------------------------------------------------
                if (Character.isDigit())
                {

                }
                else if (Character.isLetter())
                {

                }

这是一个样品。根据需要,只查找字符串和过程形式中的数字。

text.replaceAll("\\d(?!$)", "$0 ");

欲了解更多信息,请查看谷歌文档 https://developer.android.com/reference/java/util/regex/Pattern在这里可以使用Pattern