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またはbまたはのいずれかを入力した場合にのみ true と評価されます。c

使用した正規表現のため、正規表現に関する[abc]ドキュメントを参照してください

入力abしても受け付けません。

入力に ​​char のいずれかを含めたい場合は、正規表現を に変更できます[abc]+

于 2013-09-15T11:27:28.433 に答える
1

あなたの正規表現[abc]は、「a、b、またはcのいずれかの1文字」を意味します。

正規表現を に変更します。[abc]+これは、「a、b、または c のいずれかの 1 つ以上の文字」を意味します。

于 2013-09-15T11:27:37.760 に答える
0

追加情報:
これも機能します:

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

Pattern.matches(regex,this);内部で呼び出します。(regex正規表現はどこで使用されますか)

于 2013-09-15T11:34:03.757 に答える
0

(すべてのコメントを読んだ後に更新されました...)

わかりましたので、私が正しく理解していれば、a、b、または c の文字を含む入力行から配列に格納する必要があります。

リンゴ、ボール、キャッチ、テーブル、チクタク…が収納されます。右?

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 に答える