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值变化后,会覆盖原来的值。