大神帮帮忙,看看这个java代码,我想要集合的元素出现0-9中任何一个字符的时候,
2个回答
展开全部
代码主要存在两个问题:
问题一:正则表达式的写法,正确的如下
h.matches(".*\\d+.*") // 用于匹配字符串中包含数字
问题二: 逻辑问题
l.remove(i);//在for循环里,一边循环,一边删除里面的元素会出现bug的
例如, 查找苹果, 找到苹果就删除
list={"苹果","苹果","鸭梨"}
下标=0 ,1,2
for循环,i =0时,查找到了苹果,删除了, 因为list是有序的,所以后面的第二个苹果,就从下标1的位置,补位到了下标为0的地方
list={"苹果","鸭梨"}
下标 =0,1
for循环, i=1,就没有检查到下标为0的"苹果". 此时发现 下标为1的地方是鸭梨.不会删除, 循环结束了...
完整的参考代码
import java.util.*;
public class Demo {
public static void main(String[] args) {
List list=new ArrayList();
list.add("520");
list.add("Q3");
list.add("xyz");
list.add(12);
for (int i = 0; i < list.size(); i++) {
String temp = list.get(i).toString();
if(temp.matches(".*\\d+.*")) {//匹配字符串是否含有数字
System.out.println("找到了"+list.get(i));
list.remove(i);//下标被删除了, 那么后面一个元素的下标就补位成为了i,如果再次执行i++.就会跳过检查补位的元素
i--;// 所以这里的下标还要前移
}
}
}
}
2018-12-08
展开全部
l是个数组,里面有你添加的四个元素。分别是四个长的字符串“5226654426”,“jhcc9”..,你每次拿到的 l.get(i).toString()不是单个的字符啊,比如你第一次拿到的是“5226654426”。而“[0-9]”则表示的是0-9中任意一个单个的数字,所以你这么比较当然不会执行了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询