2013-09-15 3 views
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; 
      } 
+2

Что вы пытаетесь достичь с помощью этого кода? –

+0

Мне нужно записать строки в массиве, содержащие буквы abc – eatmypants

+1

Вероятно, потому что 'if (Pattern.matches (" [abc] ", str))' никогда не выполняется. – Maroun

ответ

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

Оценивает истину, только если ввести либо a или b или c

из-за регулярное выражение вы использовали [abc], увидеть документы о regular expressions

Если вы введите ab, тогда оно не будет принято.

Если вы хотите, чтобы ваш ввод содержал какой-либо символ, вы можете изменить свое регулярное выражение на [abc]+.

1

Ваше регулярное выражение [abc] означает «один символ либо a, b, либо c».

Измените регулярное выражение [abc]+, что означает «один или более символов, либо, б или в»

0

(обновлено после прочтения всех комментариев ...)

Окей, так что, если я правильно понимаю: Вы хотите сохранить в массив из строки ввода те, кто содержит буквы a, b или c.

apple, ball, catch, table, tictac ... будет сохранен. Правильно?

Я бы использовал строку String или 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)); 
+0

Петля в порядке, но OP хочет строки, соответствующие шаблону, а не все, равные 'abc' и заканчивающиеся массивом из 100' abc '. – A4L

+0

Нет. Я просто пытаюсь найти строки, содержащие a, b или c, и записать их в массив. – eatmypants

0

Extra Info:
Это будет также работать:

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

Он называет Pattern.matches(regex,this); внутренне. (где используется regex)

Смежные вопросы