检查字符列表中的5个标点符号

时间:2013-11-24 15:08:47

标签: java string loops while-loop char

如何查找用户必须输入的字符列表中是否有“,”“?”“!”“;”“。”。我做了一个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。 :

  

程序,用于提示用户输入不同于数字的字符。第一个数字   用户输入的内容将停止输入,然后程序应显示标点符号   输入的字符(此列表之一!。,;?)。如果未找到,则显示消息“输入的字符   没有标点符号“。

2 个答案:

答案 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++;
        }
    }