在进行JSON数据采集的时候,对于单个节点数据,可能存在多个分隔符分隔数据。那么对于数据1,2,3|4,5,6我们需要依据分隔符的来进行分割切分。有三种方法:
- String.split方法
- StringTokenizer方法
- subString拼接方法
split方法本质上是使用正则表达式来进行切割的,所以我们在使用他的时候对于像:|这种转义字符进行切割的时候就出现问题了:
String str = "1|6|9";
System.err.println( Arrays.toString(str.split("|") )) ;
解决方案
1、前端手动处理转义字符;
2、后端手动处理转义字符;
后端处理:
//方法一:String.split加HashMap // static HashMapStringTokenizerspecialSpliterMap = new HashMap<>(); public static void initSpecialSpliterMap(){ specialSpliterMap.put("|", "\|"); specialSpliterMap.put(".", "\."); specialSpliterMap.put("*", "\*"); specialSpliterMap.put("+", "\+"); } public static void main(String[] args) { initSpecialSpliterMap(); String str = "1|6|9"; System.err.println( Arrays.toString( str.split( specialSpliterMap.get("|") )) ) ; }
StringTokenizer类是一个较偏僻的历史留下来的兼容类。特点是不支持正则表达式,也就不存在转义字符的问题,但是本质上是只支持单字符分割的:
String str = "1,2,3|4,5,6|7,8,9";
StringTokenizer st = new StringTokenizer(str , ",,",false);//"|");
while(st.hasMoreTokens()) {
System.out.println(st.nextToken());
}
|分割:
,和,或者,分割:
原因 构造StringTokenizer(String str, String delimiters) StringTokenizer(String str, String delimiters, boolean delimitersAreToken)
其中第三个boolean delimitersAreToken是是否返回分隔符也是token,启用后:
substring 最精确的,就是操作表较繁琐,效率比上面两个都要低:
public static ListgetListByDelimiter(String str , String delimiter) { int index; String tempString; List resList = new LinkedList<>(); while ((index = str.indexOf(delimiter)) >= 0) { tempString = str.substring(0, index); if(tempString!=null && !tempString.trim().equals("")) resList.add(tempString); str = str.substring(index + delimiter.length()); if (str.indexOf(delimiter)<0) { if(str!=null && !str.trim().equals("")) resList.add(str); } } return resList; } public static void main(String[] args) {s for (String s : getListByDelimiter(str, "|")) { System.out.println(s); } }
这个方法会过滤掉空值和空串数据,比如说拼接long,width,high的数据:
"type3": [
{
"long": "1, ,3,4, ",
"width": " ,7, ",
"high": " ,10,11, "
}
]
最终结果:10,11,1,3,4,7
比如说:
String str = "1,2,3,, ,6";
输出:
不过滤数据的当我们去掉两个if判断后:
public static ListgetListByDelimiter(String str , String delimiter) { int index; String tempString; List resList = new LinkedList<>(); while ((index = str.indexOf(delimiter)) >= 0) { tempString = str.substring(0, index); resList.add(tempString); str = str.substring(index + delimiter.length()); if (str.indexOf(delimiter)<0) { resList.add(str); } } return resList; }



