用户应该给出一个字符串,我们应该检查所有字符是否都是数字。
如果所有都是数字,我们将收到一条密码为数字的消息,然后继续执行该程序。如果其中任何一个(或全部)不是数字,则用户应再次输入密码。
(例如465486
是可以接受的。hell3429384
或sfdkjsfkj
是不可接受的)
显然,我的代码工作不正常,因为无论是给密码输入数字还是字母,我都得到相同的结果。
我是在循环错误,还是我使用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();
}
}
}
}
答案 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!");
}