为防止双引号转义符内部还有其他双引号转义符\"的影响,对\\\"用#@#占位符将之替换 。
需要引入第三方工具类辅助进行占位符替换:
import org.apache.commons.lang3.StringUtils;
依赖为:
【java工具栏代码分隔 java窗口分割线】dependency
groupIdorg.apache.commons/groupId
artifactIdcommons-lang3/artifactId
version3.3.2/version
/dependency
代码为:
public class Main {
public static void main(String[] args) {
String a = "String a = \";\";String b = \"aaaa\";";
String b = "String a = \"\\\";\";String b = \"aaaa\";";
System.out.println(codeSplit(a));
System.out.println(codeSplit(b));
}
private static ListString codeSplit(String a){
//排除双引号转义符内部还有其他双引号转义符\"的影响,用“#@#”占位符将之替换
a = StringUtils.replace(a, "\\\"", "#@#");
ListString result = new ArrayList();
boolean start = true;//检查双引号转义符,为true时代表找到双引号转义符的左转义符,为false时代表找到双引号转义符的右转义符
while (a.indexOf("\"")0) {
int index = a.indexOf("\"");//index:双引号左转义符位置
//发现双引号转义符时,将当前字符串的(0 至 index + 1)字符截取出来作为tmp
String tmp = a.substring(0, index + 1);
a = a.substring(index + 1);//将截取剩下的部分重新赋值给原字符串
if (start) {
//发现双引号转义符的左转义符,对tmp字符串按分号进行分割 , 将不为空的结果添加到结果集中
String[] stArr = tmp.split(";");
for (String s : stArr) {
if (s.length()0) {
result.add(s);
}
}
} else {
//发现双引号转义符的右转义符,不进行分割,将tmp字符串拼接到结果集的最后一个字符串中
String end = result.get(result.size() - 1);
end += tmp;
result.remove(result.size() - 1);
result.add(end);
}
start = !start;//转置双引号转义符标志,正常情况下双引号转义符必须成对出现,否则将得到预期外的结果
}
//跳出循环后对剩余的a字符串再做一次分割
String[] stArr = a.split(";");
for (String s : stArr) {
if (s.length()0) {
result.add(s);
}
}
//将结果集内的“#@#”占位符还原为\"
return result.stream().map(s - StringUtils.replace(s, "#@#", "\\\"")).collect(Collectors.toList());
}
}
运行结果:
java如何分割字符串substring讲解:
s=s.substring(int begin);截取掉s从首字母起长度为begin的字符串,将剩余字符串赋值给s;
s=s.substring(int begin , int end);截取s中从begin开始至end结束时的字符串,并将其赋值给s;
split讲解:
java.lang.string.split
split 方法
将一个字符串分割为子字符串,然后将结果作为字符串数组返回 。
stringObj.split([separator,[limit]])
参数
stringObj
必选项 。要被分解的 String 对象或文字 。该对象不会被 split 方法修改 。
separator
可选项 。字符串或 正则表达式 对象,它标识了分隔字符串时使用的是一个还是多个字符 。如果忽
略该选项,返回包含整个字符串的单一元素数组 。
limit
可选项 。该值用来限制返回数组中的元素个数 。
说明
split 方法的结果是一个字符串数组,在 stingObj 中每个出现 separator 的位置都要进行分解
。separator 不作为任何数组元素的部分返回 。
split 的实现直接调用的 matcher 类的 split 的方法 。“ . ”在正则表达式中有特殊的含义,因此我们使用的时候必须进行转义 。
Java代码
public static void main(string[] args) {
推荐阅读
- 直播大舞台工具,直播舞台设计
- 终结者6拍摄的花絮是什么,终结者6精彩片段
- asp.net图片全屏,aspnet mvc图片上传
- 益智小游戏视频挖掘机教案,幼儿益智挖掘机视频
- vb.net数组添加元素 vb如何给数组赋值
- 国二考试C语言怎么调试程序,国二c语言程序设计题怎么给分
- 手机显示无通知是什么意思,手机无通知怎么办啊
- phpedb数据库,php数据库类库
- php代码关联app数据 php绑定数据库