如何查找用户必须输入的字符列表中是否有“,”“?”“!”“;”“。”。我做了一个while循环,当用户输入任何数字时我打破了它从0到9 ..
示例运行:
Enter any character (a digit 0-9 to stop): a B , R x u ! @ . C W 2
The list you entered contains 3 punctuations signs.
我所做的一部分
int count = 1;
while ( count > 0 )
{
Scanner input = new Scanner(System.in);
System.out.print("Enter any character and a digit 0-9 to stop: ");
char ch = input.next().charAt(0);
if ( ch>=0 && ch<=9)
break;
}
原始q。 :
程序,用于提示用户输入不同于数字的字符。第一个数字 用户输入的内容将停止输入,然后程序应显示标点符号 输入的字符(此列表之一!。,;?)。如果未找到,则显示消息“输入的字符 没有标点符号“。
答案 0 :(得分:0)
扫描仪不是我经常使用的一个类,与问题无关,所以我将在这里的代码中忽略它,并假设你可以自己做这些部分。
首先,你可以在这里修复你的无限循环:
int count = 1;
while ( count > 0 ) // count is never changed
{
// ~~
char ch = /* ~~~~ */;
if ( ch>=0 && ch<=9) // Unicode codes 0-9 are non-characters
break;
}
相反,你可以这样做:
while (true)
{
// ~~
char ch = /* ~~~~ */;
if (ch >= '0' && ch <= '9')
break;
}
while (true)
只要你自己的退出条件不含糊而且有效就不是坏事。
为了检查标点符号,您可以设计自己的逻辑。我可以想到三个最简单的解决方案来检查字符是否是标点符号:
String punctuationAsString = "!.,;?";
char[] punctuationAsArray = {
'!', '.', ',', ';', '?'
};
while (true)
{
// ~~
char ch = /* ~~~~ */;
if (ch >= '0' && ch <= '9') {
break;
}
// simple one line
if (punctuationAsString.contains(ch)) {
System.out.println("is punctuation");
} else {
System.out.println("not punctuation");
}
// String#contains basically does this
boolean punc = false;
for (int i = 0; i < punctuationAsArray.length; i++) {
if (ch == punctuationAsArray[i]) {
punc = true;
break;
}
}
System.out.println((punc ? "is" : "not") + " punctuation");
// verbose but clear
switch (ch) {
case '!':
case '.':
case ',':
case ';':
case '?': System.out.println("is punctuation");
break;
default: System.out.println("not punctuation");
}
}
答案 1 :(得分:0)
试试这个:
int count = 0;
String userInput = "a B , R x u ! @ . C W 2";
if(userInput.matches("^[^\\d].*")){
Pattern p = Pattern.compile("[!,./;?]");
Matcher m = p.matcher(userInput);
while (m.find()){
count++;
}
}