问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

...split(";")来分隔我的Java代码, 但是若是字符串中有`;`我该怎么办...

发布网友 发布时间:2024-07-04 02:04

我来回答

4个回答

热心网友 时间:2024-08-02 18:04

你的问题在于转义的双引号字符串内的分号不应该拿来分割。未解决这个问题只能将转义的部分单独截取出来,不参与分割,等其他部分分割结束后,再将转义的内容拼接进去即可。

为防止双引号转义符内部还有其他双引号转义符\"的影响,对\\\"用#@#占位符将之替换。

需要引入第三方工具类辅助进行占位符替换:

import org.apache.commons.lang3.StringUtils;

依赖为:

<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.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 List<String> codeSplit(String a){
//排除双引号转义符内部还有其他双引号转义符\"的影响,用“#@#”占位符将之替换
a = StringUtils.replace(a, "\\\"", "#@#");
List<String> 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());
}
}

运行结果:

热心网友 时间:2024-08-02 18:04

为什么会出来一个,(逗号),你有代码,贴一下吗?我下午可能会看一下。

热心网友 时间:2024-08-02 18:02

直接使用
split(";")
就可以进行分割

热心网友 时间:2024-08-02 18:07

根据你的期望,你可以选择使用JSON.parseArray
我想用split(";")来分隔我的Java代码, 但是若是字符串中有`;`我该怎...

代码为: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...

java中用split截取一段字符串,字符串中含有".",结果“.”后面的数据就...

请检查你的代码是否有误,参考代码如下:import java.util.Arrays;public class Test {public static void main(String[] args) {String ss="2.1=2.2=2.3";String[] arr=ss.split("=");System.out.println(Arrays.toString(arr));}}运行结果如下:

Java中split的用法

Java中split主要用于分隔字符串。具体分析如下:1、如果用“.”作为分隔的话,必须是如下写法,String.split("\\."),这样才能正确的分隔开,不能用String.split(".")。2、如果用“|”作为分隔的话,必须是如下写法,String.split("\\|"),这样才能正确的分隔开,不能用String.split("|"),“.”和“...

java中用split()分割字符串,把分割后的字段存入一个数组或者集合怎么弄...

2) 对每一行,用split(","),存入一个临时数组,把各部分添加进1)中定义的相应集合中。 追问 能不能来一小段程序示范一下呀?这个思路倒是差不多,实现的时候出现点问题。 追答 什么问题?import java.util.*;import java.io.*;public class MyTest1 { public static void main(String[] args) throws Excepti...

“string .split”的用法是什么?

split(".");\x0d\x0a2、如果用“|”作为分隔的话,必须是如下写法:String.split("\\|"),这样才能正确的分隔开,不能用String.split("|");\x0d\x0a“.”和“|”都是转义字符,必须得加"\\";\x0d\x0a3、如果在一个字符串中有多个分隔符,可以用“|”作为连字符,比如:“...

Java-字符串切割(split)

Java中,String对象的split()方法用于分割字符串。当不使用转义符进行分割时,如按"."进行分割,如果字符串中不含".",返回值将是一个空的长度为0的String数组。而如果使用"|"进行分割,即使字符串中不含"|",返回值将是一个长度与原字符串相等的String数组。原因在于,split()方法会将原字符串中每...

java中怎么把一个字符串中数字和字符分别提取出,例如字符串12+3,要提 ...

根据它们的ascii码区分,用正则表达式会简单点:String input="12+3";String regExp="\\D";//非数字的正则表达式 String [] nums=input.split(regExp);//取得数字 System.out.println(Arrays.asList(nums));//取得非数字 Pattern p = Pattern.compile(regExp);Matcher m = p.matcher(input);...

请问split("\\.")是什么意思?(JAVA代码)

split是按照指定的字符分割字符串为字符串数组,这里的分隔符比较特殊,是.所以要加反斜杠进行转义,也就是达到利用.分割字符串的效果。比如x.y.z 调用split("\\.")后得到数组[x,y,z]

Java split()函数,如果分割的字符串中没有指定的分隔符,返回后会是什么...

返回值是一个数组大小为1的数组,arr(0)=“12345”。Split函数,是指返回一个下标从零开始的一维数组,它包含指定数目的子字符串。Split函数语法如下图:

请问split("\\.")是什么意思?(JAVA代码)

split(参数)的参数是个正则表达式的字符串。 首先Java中的“\”的后面只能带下面几个字符 ,也就是“ \b \t \n \f \r \" \' \\” ,所以“\.”就不在里面,就会报错了啊。“\\.”的意思就是 “\\”首先转成“\”然后再在“\”字符的后面加一个“.”这样就组成了“\...

java中的split方法 java语言中的split java中split用法 string类中split函数 java split函数 string split返回 splitstring split函数 python Java equals
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
游戏王集咩卡组好啊?(光道、六武众、黑羽、剑斗兽、命运英雄、元素英雄... 游戏王 哪个卡组比较可爱 比较厉害 比较好卖的?? 求高手指点... ...我们仿照五柳先生传写一篇自传啊!大侠们帮帮忙..十万火急!!_百度... pes2009绿茵传奇为什么不能参加中国国家队? ...申请已经提前交过了,等到下个月发工资时却20天工资没发。怎么办... ...压的那20天的要等到走了之后再过20天再来拿可是…… ...离职20天还可不可以拿上个月的工资,要是拿不到我该怎怎么办,现在我... 签约45天的合同,但只干了20天,是不是拿不到一分钱? 唐家三少一共出了几本小说 PES2010绿茵传奇玩不了勒卡在联赛后半程了 ...核显占用一部分内存,而+A卡的话就不会,这是为什么? 上门提亲的正确步骤 JAVA split("|") 简单的问题~ 2021年9月属鼠人幸运色是什么黄色催旺事业运势? 刚装修的餐饮店放什么植物好呢? 八角笼中俱乐部让苏木吃的药是什么药 为什么Java使用split分隔字符串时,分隔"?"字符需要写成[?]呢?_百度... 刑法第十三条内容是什么 苹果手机屏幕怎么不能滑动了 龙头英语:表音密码o-e怎么发音? 甲乙丙丁代表什么时辰甲乙丙丁是代表什么时辰 25g铁板用几号线纺车 为什么老是胃疼 改病句:为了防止这类事故不再发生,我们必须采取有效措施 轩缘开头的四字网名 未到法定结婚年龄生子罚款多少 周末计划去杭州休闲游,有什么好的建议? 周末计划去淮安休闲游,行程如何规划? 安宁的周末计划是什么意思 圆弧顶阳光房搭建的方法有什么 请教一下餐饮店放什么植物好呢? 开发票时显示开票日期超过开票截至日期是什么意思 经济协同效应概念 适合女的养的转运的花 女的养什么花转运 民间曲艺道情是什么意思? 淘宝全自动推广是什么? 电脑主板华硕P5SD2-A显卡RADEON X700 (Microsoft Corporation - WDDM... 打算装修想买皮质的沙发,看到分为进口的、珠光的、中厚的,这三者... 香港修改逃犯条例是什么意思? 哪些碎屑岩结构可以指示水流方向 永辉超市购物卡可以退吗? 华为p40pro上市时间和价格 ...有个英文商标只有第一个字母和我不同?我能注册吗? 经济协同效应经济协同效应带来的好处 企业集团协同经济研究内容简介 扩展VGA显示器黑屏怎么办? 法律规定股东出资形式是什么 昆明哪些小区划分莲华片区? 步步高超市的购物卡可以退吗? 东莞已注册公司,变更公司名称,核名下来了我不想要这个名字,想换别的...