问题描述
- java截断字符串问题,用逗号截断,但是值里面有逗号
-
一个SQL语句的values里面的值,这里是三个字段,null,'0,1,2,3','2014-03-12 18:38:26.467319'
现在的问题是用逗号截断,第二个字段的值'0,1,2,3'也会被截断,求解决方法,怎么截断成三个
串 null 0,1,2,3 2014-03-12 18:38:26.467319
解决方案
public static void main(String[] args) {
String s = "null,'0,1,2,3','2014-03-12 18:38:26.467319'";
final String[] split = s.split("'");
for (String ss : split) {
final String replaceAll = ss.replaceAll("^,|,$", "");
if (replaceAll.length() > 0) {
System.out.println(replaceAll);
}
}
}
解决方案二:
只能借助于单引号,截取的时候先用(,')截取,再对截取的信息用逗号截取。也就是先考虑字符串,再对是数字型,数字型(可以根据有单引号的就不是数字)的方式进行二次处理。
解决方案三:
CSV 格式解析时不能简单按逗号分割。而是:
每个字段开始时(行首或用于分割的逗号之后),先判断下个字符:
a)如果是行结束,当前字段是null所以输出null,结束一行;
b)如果是逗号,输出null,前进一个字符(下个逗号之后);
c)如果是单引号,就找下一个单引号(如果有连续两个单引号跳过继续向后找),然后把头尾单引号内的字符串截取出来,两个单引号替换为一个单引号,输出,前进到(必须是单引号后的)逗号之后。
d)其它,就找下一个逗号,然后把当前位置到逗号前的字符串截取出来,输出,前进到逗号之后。
解决方案四:
刚刚没有考虑全面、再次重写
public static void main(String[] args) {
String s = "'',null,123,'0,1,2,3','2014-03-12 18:38:26.467319'";
//以逗号分隔数据
final String[] split = s.split(",");
List<String> stringList = new ArrayList<>();
//临时值存储、例如 '0,1,2,3' 字符串中包含,的参数值
String temp = "";
try {
for (final String one : split) {
final int oneLength = one.length();
//是否以 ' 开始或者结束 boolean 值
final boolean isStartSingleQuotes = one.indexOf("'") == 0;
final boolean isEndSingleQuotes = one.lastIndexOf("'") == oneLength - 1;
//如果当前不是处理'0,1,2,3'的数据
if (!temp.isEmpty()) {
//如果以 ' 结束 表示追加数据完毕,否则继续添加
if (isEndSingleQuotes) {
temp += "," + one;
final String substring = temp.substring(1, temp.length() - 1);
stringList.add(substring);
temp = "";
} else {
temp += "," + one;
}
continue;
}
//如果以'开始,判断是否以'结束,如果是表示是字符串
//否则为 '1,2,3'类似的参数值记录到临时 temp String 中
if (isStartSingleQuotes) {
if (isEndSingleQuotes) {
final String substring = one.substring(1, oneLength - 1);
stringList.add(substring);
} else {
temp += one;
}
} else {
stringList.add(one);
}
}
System.out.println(stringList);
} catch (Exception e) {
System.err.printf("参数值不正确、解析错误 error :" + e.getMessage());
}
}
时间: 2024-09-17 04:23:05