0

运行此代码后,数组不会更改。它的原因是什么?谢谢

    Scanner s = new Scanner(System.in);

    String [] h = new String[100];
    int hlds = 0;

    while (true) {
        System.out.print("Enter: ");
        if(s.hasNextLine()) {

            String str = s.nextLine();

            if (Pattern.matches("[abc]", str)) {
                h[hlds++] = str;
            }
            for( int i = 0; i < h.length ; i++){
                System.out.println(h[i]);
            }
            break;
            }
4

4 回答 4

1
Pattern.matches("[abc]", str)

a仅当您输入orb或 or时评估为 truec

由于您使用了正则表达式[abc],请参阅有关正则表达式的文档

如果您输入ab,则不会被接受。

如果您希望您的输入包含任何字符,那么您可以将您的正则表达式更改为[abc]+.

于 2013-09-15T11:27:28.433 回答
1

您的正则表达式[abc]表示“a、b 或 c 的单个字符”。

将您的正则表达式更改为[abc]+,意思是“一个或多个字符 a、b 或 c”

于 2013-09-15T11:27:37.760 回答
0

(阅读所有评论后更新......)

好吧,如果我理解正确的话:您想从输入行将包含 a、b 或 c 字母的那些存储到数组中。

苹果,球,接球,桌子,tictac...将被存储。正确的?

我会使用 String contains 或 indexof 来查找 a、b 和 c 字母。这比正则表达式更有效。

Scanner s = new Scanner(System.in);
String [] h = new String[10];

Pattern p = Pattern.compile("(a|b|c)");
for(int hlds=0; hlds<h.length;hlds++ ) {
    System.out.print("Enter: ");
    String str = s.nextLine();
    /* with regex
    if( p.matcher(str).find() ) {
        h[hlds] = str;
    }
    */

    /* with contains */
    if( str.contains("a") || str.contains("b") || str.contains("c") ) {
        h[hlds] = str;
    }
}

System.out.println(Arrays.toString(h));
于 2013-09-15T11:29:27.543 回答
0

额外信息:
这也可以:

str.matches("[abc]+");

它在内部调用Pattern.matches(regex,this);。(regex使用的正则表达式在哪里)

于 2013-09-15T11:34:03.757 回答