栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > .Net

字符串三种方式切割:split、substring、StringTokenizer

.Net 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

字符串三种方式切割:split、substring、StringTokenizer

前言

在进行JSON数据采集的时候,对于单个节点数据,可能存在多个分隔符分隔数据。那么对于数据1,2,3|4,5,6我们需要依据分隔符的来进行分割切分。有三种方法:

  1. String.split方法
  2. StringTokenizer方法
  3. subString拼接方法
split 存在的问题

split方法本质上是使用正则表达式来进行切割的,所以我们在使用他的时候对于像:|这种转义字符进行切割的时候就出现问题了:

String str = "1|6|9";

System.err.println( Arrays.toString(str.split("|") )) ;

解决方案

1、前端手动处理转义字符;

2、后端手动处理转义字符;

后端处理:

//方法一:String.split加HashMap
//
static HashMap 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 getListByDelimiter(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 List getListByDelimiter(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;
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/983080.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号