java正则化,返回同一字符串多处匹配结果。

it2023-08-01  68

1、需求: 正则化匹配时,正则表达式pattern,需要匹配字符传string中的多处,并将没一处的位置信息返回! 2、代码:

import java.util.ArrayList; import java.util.HashMap; import java.util.regex.Matcher; import java.util.regex.Pattern; public class test { public static void main(String[] args) { ArrayList<HashMap<String,Object>> list=new ArrayList<HashMap<String, Object>>(); //“zidian”定义在此处,赋值要在循环内。 HashMap<String,Object> zidian = null; String ss="ooaaoo"; Pattern pt=Pattern.compile("(o+)"); Matcher mt=pt.matcher(ss); // mt.lookingAt(); // mt.matches(); while(mt.find()){ System.out.println(mt.start()); //赋值位置,每次循环要重新给字典赋内存空间,否则最后结果会覆盖前面结果。 zidian=new HashMap<String, Object>(); // System.out.println(mt.end()); // System.out.println(mt.group()); zidian.put("start",mt.start()); zidian.put("end",mt.end()); zidian.put("content",mt.group()); // ArrayList<Integer> span = new ArrayList<Integer>(); // span.add(mt.start()); // span.add(mt.end()); // zidian.put("span", span); // System.out.println(zidian); list.add(zidian); System.out.println(list); } } }

错误代码: HashMap<String,Object> zidian = new HashMap<String, Object>(); 这种方式,字典在存入list时,一直固定存入list的制定空间,当zidian值变化后,会覆盖原来的值。

最新回复(0)