今天在获取BLOB字段类型的内容时,查阅了一些文档,最后选择用正则来实现,虽然说用字符串的的indexOf也可以实现。
首先是当然是得到实体,然后再得到这个属性,再使用JDK自带的对Blob的getBinaryStream()方法,将其转换成字节流,然后通过new String()来得到字符串对象。然后就可以调用这个静态的方法啦。
public static List<String> regex(String xml, String label) {
// 正则表达式
String rgex = "<" + label + ">(.*?)</" + label + ">";
Pattern pattern = Pattern.compile(rgex);// 匹配的模式
Matcher m = pattern.matcher(xml);
// 匹配的有多个
List<String> list = new ArrayList<String>();
while (m.find()) {
int i = 1;
// 匹配到一对标签内的字符串,如果为空则不加入集合中
String group = m.group(i);
if ((group != null) && (!"".equals(group))) {
list.add(group);
}
i++;
}
return list;
}
正则里 '' 代表任意字符,*代表多个,
。*具有贪婪的性质,首先匹配到不能匹配为止,根据后面的正则表达式,会进行回溯
。*?则相反,一个匹配以后,就往下进行,所以不会进行回溯,具有最小匹配的性质。
因此,这种正则只能匹配到相邻的一对标签内的值。如
<Students>
<Student>
<Name>abc</Name> // 比如取Name标签的值,不会取到下一个结束标签
<Age>1</Age>
</Student>
<Student>
<Name>def</Name>
<Age>2</Age>
</Student>
</Students>
最后,以此记录我又新学会了一滴丢东西。