split拆分字符串,以 “,“ 拆分,并且忽略双引号间的 “ ,“
split 拆分字符串,以 “,“ 拆分,并且忽略双引号间的 “ ,“
需求
现有一份 .csv 格式数据,数据格式如下,需要以逗号分隔字符串,但忽略双引号内的逗号。
违反指示,G4辅路,东向西,"118.266529560,39.869942703",999350003108,52,0,0,0,3,3,轨迹
需要达到的目的如下:
["违反指示","G4辅路","东向西","118.266529560,39.869942703","999350003108","52","0","0","0","3","3","轨迹"]
解决
- 使用正则表达式配合
.split()
进行字符串分割 - 使用
cn.hutool.core.text.csv
中的CsvReader
和CsvData
进行分割
1. 使用正则表达式配合.split()
进行字符串分割
package com.data;
import org.junit.Test;
@RunWith(SpringRunner.class)
@SpringBootTest
public class DataPushServiceTest {
@Test
public void testFun(){
String line = "违反指示,G4 辅路, 东向西,\"118.266529560,39.869942703\",999350003108,52,0,0,0,3,3, 轨迹";
String[] res = line.trim().split(",(?=([^\\\"]*\\\"[^\\\"]*\\\")*[^\\\"]*$)",-1);
for (String s : res){System.out.println(s);
}
// 输出完整的数据
System.out.println(res);
}
}
output:
违反指示
G4 辅路
东向西
"118.266529560,39.869942703"
999350003108
52
0
0
0
3
3
轨迹
违反指示,G4 辅路, 东向西,"118.266529560,39.869942703",999350003108,52,0,0,0,3,3, 轨迹
2. 使用 cn.hutool.core.text.csv
中的 CsvReader
和 CsvData
进行分割
package com.data;
import org.junit.Test;
import cn.hutool.core.text.csv.CsvData;
import cn.hutool.core.text.csv.CsvReader;
@RunWith(SpringRunner.class)
@SpringBootTest
public class DataPushServiceTest {
@Test
public void testFun(){
CsvReader csvReader = new CsvReader();
File file = new File("E:/data/bj_weizhang.csv");
CsvData read = csvReader.read(file);
String coords = read.getRow(1).getByName("coords");
System.out.println(coords);
}
}
output:
"118.266529560,39.869942703"
使用这个方法更简单,但是该方法会一次加载文件的全部内容,文件较大是对性能要求较高,慎用!
License:
CC BY 4.0