...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 \" \' \\” ,所以“\.”就不在里面,就会报错了啊。“\\.”的意思就是 “\\”首先转成“\”然后再在“\”字符的后面加一个“.”这样就组成了“\...