前言
在进行JSON数据采集的时候,对于单个节点数据,可能存在多个分隔符分隔数据。那么对于数据1,2,3|4,5,6
我们需要依据分隔符的来进行分割切分。有三种方法:
- String.split方法
- StringTokenizer方法
- subString拼接方法
split
存在的问题
split方法本质上是使用正则表达式来进行切割的,所以我们在使用他的时候对于像:|
这种转义字符进行切割的时候就出现问题了:
String str = "1|6|9";System.err.println( Arrays.toString(str.split("|") )) ;
解决方案
1、前端手动处理转义字符;
2、后端手动处理转义字符;
后端处理:
//方法一:String.split加HashMap
//
static HashMap<String, String> specialSpliterMap = 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
? 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 List<String> getListByDelimiter(String str , String delimiter) {
int index;String tempString;List<String> 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) {
sfor (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 List<String> getListByDelimiter(String str , String delimiter) {
int index;String tempString;List<String> 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;
}