这里我是利用substring,split以及正则表达式去对一个字符串进行截取,或者说是将一个字符串拆分成几个子串。
正则表达式 + substring / split
package cn.nuist.jr;
import java.util.ArrayList;
import java.util.List;
public class Test {
public static void main(String[] args) {
//以regex作为分隔符,将一串字符中的其他部分截取出来
String str = "82988abc3443abcfgjhgabcgfjabc";
String regex = "abc";
// String [] res = str.split(regex);
// for(int i =0; i < res.length; i++){
// System.out.println(res[i]);
// } //split部分
List<String> list = new ArrayList<String>();
while(str.contains(regex)){
list.add(str.substring(0, str.indexOf(regex)));
str = str.substring(str.indexOf(regex) + regex.length());
// System.out.println(str);
}
for(String string : list){
System.out.println(string);
}
}
}
参考截图:
当我直接用正则表达式去截取时,会出现局限性,如下所示。希望您们可以和我一起讨论改进。
package cn.nuist.jr;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Regex {
public static void main(String[] args) {
String str = "82988abc3443abcgfjabc8068abc";
String regex = "abc(.*?)abc";
System.out.println((new Regex()).getSubUtil(str, regex));
List<String> list = (new Regex()).getSubUtil(str, regex);
for (String string : list) {
System.out.println(string);
}
}
public List<String> getSubUtil(String temp,String regex){
List<String> list = new ArrayList<String>();
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(temp);
while (m.find()) {
int i = 1;
list.add(m.group(i));
i ++;
}
return list;
}
}
截图:
你会发现他读取第一个abc和abc之间的数之后,会把与下一个abc间的数错过,具体看截图和代码的对比。所以待解决。故而第一种更值得推荐。
以上就是这篇的内容,有什么错误的地方或者您觉得可以改进的地方,欢迎指出,谢谢!