数组更改不起作用

时间:2013-09-15 11:16:23

标签: java regex

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

    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 个答案:

答案 0 :(得分:1)

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

仅在您输入abc

时才评估为真

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

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

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

答案 1 :(得分:1)

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

将正则表达式更改为[abc]+,表示“a,b或c中的一个或多个字符”

答案 2 :(得分:0)

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

哦,如果我理解正确的话: 您希望从输入行将包含a,b或c字母的数据存储到数组中。

apple,ball,catch,table,tictac ...将被存储。正确?

我会使用String contains或indexof来fins 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));

答案 3 :(得分:0)

额外信息:
这也可行:

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

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