检查字符串是否只包含数字? (需要isDigitMethod)

时间:2017-11-06 13:03:29

标签: java

用户应该给出一个字符串,我们应该检查所有字符是否都是数字。 如果所有都是数字,我们将收到一条密码为数字的消息,然后继续执行该程序。如果其中任何一个(或全部)不是数字,则用户应再次输入密码。 (例如465486是可以接受的。hell3429384sfdkjsfkj是不可接受的)

显然,我的代码工作不正常,因为无论是给密码输入数字还是字母,我都得到相同的结果。 我是在循环错误,还是我使用isDigit方法错了?

import java.util.*; 
public class Password {
    public static void main(String[] args) {
        Scanner passn = new Scanner(System.in);
        System.out.println("Give password: "); 
        String pass = passn.nextLine(); /* user enters password*/
        int length = pass.length();
        boolean isadigit; 
        for(int i = 0; i < length; i++) { /*looping each character one by    one*/     
            char character= pass.charAt(i);
            if (Character.isDigit(i)) { /*checking if each character is digit*/
                isadigit = true; /* if it is, give the value to isadigit true*/
                System.out.println("PASSWORD is w digits");
            }
            else {
                System.out.println("PASSWORD w/out digits");
                passn.nextLine();
            }
        }
    }
}

8 个答案:

答案 0 :(得分:7)

如果你可以使用java-8,那就是单行:

pass.chars().allMatch(Character::isDigit)

答案 1 :(得分:1)

您不是要检查每个字符,而是检查每个索引值。

更改

if(Character.isDigit(i))

if(Character.isDigit(character))

另外:遇到非数字时,你不会突然出现...

答案 2 :(得分:0)

好的,在这种情况下:您的问题是,在一个密码中识别出非数字后继续循环。一旦在pwd中找到非数字,您就需要打破循环:

public class TEST {

    public static void main(String[] args) {
        Scanner passn = new Scanner(System.in);
        System.out.println("Give password: "); 
        String pass = passn.nextLine(); /* user enters password*/
        int length = pass.length();

        boolean isadigit = true; 

        for(int i = 0; i<length; i++) { /*looping each character one by    one*/     
            char character= pass.charAt(i);
            if (!Character.isDigit(character)) { /*checking if current character is digit*/
                isadigit = false; /* if it is not, give the value to isadigit false*/
                break;
            }
        }

        if(isadigit)
            System.out.println("PASSWORD is w digits");
        else
            System.out.println("PASSWORD w/out digits");
    }

}

答案 3 :(得分:0)

请参阅此示例实现

    boolean isDigit = false;

    for (int i = 0; i < length; i++) {     
        char character = pass.charAt(i);

        if (Character.isDigit(character)) {
            isDigit = true;
        } else {
            passn.nextLine();
        }
    }

    if (isDigit) {
        System.out.println("PASSWORD is w digits");
    } else {
        System.out.println("PASSWORD w/out digits");
    }

答案 4 :(得分:0)

如果您使用Android,请注意:

您可以直接使用TextUtils.isDigitsOnly(),例如

TextUtils.isDigitsOnly(myString)

以防万一,空字符串只是数字,因为它不包含任何非数字;此方法也不是null - 宽容。

答案 5 :(得分:0)

在 Kotlin 中,你可以使用

text.all { it.isDigit() } 

答案 6 :(得分:-1)

说实话:你可以像你一样编写代码。但最好在其上使用正则表达式。您想知道,如果某个String只包含数字。这是代码:

String foo = "My_pwd_is_wrong_123!";
String bar = "123";
boolean foo_ok = foo.matches("^[0-9]*$") // Will be "false"
boolean bar_ok = bar.matches("^[0-9]*$") // Will be "true"

答案 7 :(得分:-1)

尝试将字符串解析为Integer。 捕捉异常

Scanner passn = new Scanner(System.in);
System.out.println("Give password: "); 
String pass = passn.nextLine(); /* user enters password*/
try
{
    Integer.parseInt(pass);
    System.out.println("Digital password!");
}
catch(NumberFormatException nfe){
    System.out.println("without digit password!");
}