大神帮帮忙,看看这个java代码,我想要集合的元素出现0-9中任何一个字符的时候,

就删除那个元素,但是这个正则表达式是不是写错了,根本不会执行... 就删除那个元素,但是这个
正则表达式是不是写错了,根本不会执行
展开
 我来答
雪飞潇潇
2018-12-08 · TA获得超过6275个赞
知道大有可为答主
回答量:1968
采纳率:91%
帮助的人:873万
展开全部

代码主要存在两个问题:

  • 问题一:正则表达式的写法,正确的如下

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中任意一个单个的数字,所以你这么比较当然不会执行了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式