运行此代码后,数组不会更改。 它的原因是什么? 谢谢
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;
}
答案 0 :(得分:1)
Pattern.matches("[abc]", str)
仅在您输入a
或b
或c
由于您使用[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
是使用的正则表达式)