我有一个模糊的字符串:
foo,bar,c;qual="baz,blurb",d;junk="quux,syzygy"
Run Code Online (Sandbox Code Playgroud)
我想用逗号分割 - 但我需要在引号中忽略逗号.我怎样才能做到这一点?好像正则表达式方法失败了; 我想我可以在看到引号时手动扫描并进入不同的模式,但是使用预先存在的库会更好.(编辑:我想我的意思是已经是JDK的一部分或已经是Apache Commons等常用库的一部分的库.)
上面的字符串应该分成:
foo
bar
c;qual="baz,blurb"
d;junk="quux,syzygy"
Run Code Online (Sandbox Code Playgroud)
注意:这不是CSV文件,它是包含在具有更大整体结构的文件中的单个字符串
Java中是否存在允许我将CSV数据文件转换为文件的现有应用程序或库XML?
该XML标签将通过可能含有的第一行的列标题中提供.
你能推荐一个Java库来读取,解析,验证和映射逗号分隔值(CSV)文件中的行到Java值对象(JavaBeans)吗?
嗨,我正在尝试读取test.csv在JAVA中调用的CSV文件.以下是我的代码:
import java.io.BufferedReader;
import java.io.FileReader;
public class InsertValuesIntoTestDb {
@SuppressWarnings("rawtypes")
public static void main(String[] args) throws Exception {
String splitBy = ",";
BufferedReader br = new BufferedReader(new FileReader("test.csv"));
String line = br.readLine();
while(line!=null){
String[] b = line.split(splitBy);
System.out.println(b[0]);
}
br.close();
}
}
Run Code Online (Sandbox Code Playgroud)
这是我的CSV文件(test.csv):
a,f,w,b,numinst,af,ub
1RW,800,64,22,1,48:2,true
1RW,800,16,39,1,48:2,true
1RW,800,640,330,1,48:2,true
1RW,800,40,124,1,48:2,true
1RW,800,32,104,1,48:2,true
1RW,800,8,104,1,48:2,true
1R1W,800,65536,39,1,96:96,true
1R1W,800,2048,39,1,96:96,true
1R1W,800,8192,39,1,48:48,true
Run Code Online (Sandbox Code Playgroud)
我试图打印csv中的第一列,但我得到的输出只是a一个无限循环.任何人都可以帮我修复此代码以打印整个第一列.谢谢.
我想知道是否有一个支持读写csv文件的好库?
我知道,现在我有两个问题.但我很开心!
我从这个建议开始不尝试拆分,而是匹配什么是可接受的字段,并从那里扩展到这个表达式.
final Pattern pattern = Pattern.compile("\"([^\"]*)\"|(?<=,|^)([^,]*)(?=,|$)");
Run Code Online (Sandbox Code Playgroud)
表达式看起来像没有恼人的转义引号:
"([^"]*)"|(?<=,|^)([^,]*)(?=,|$)
Run Code Online (Sandbox Code Playgroud)
这对我来说效果很好 - 或者它匹配"两个引号和它们之间的任何东西",或者"行开头或逗号和行尾或逗号之间的东西".通过匹配迭代可以获得所有字段,即使它们是空的.例如,
the quick, "brown, fox jumps", over, "the",,"lazy dog"
Run Code Online (Sandbox Code Playgroud)
分解成
the quick
"brown, fox jumps"
over
"the"
"lazy dog"
Run Code Online (Sandbox Code Playgroud)
大!现在我想删除引号,所以我添加了前瞻和后瞻性非捕获组,就像我为逗号做的那样.
final Pattern pattern = Pattern.compile("(?<=\")([^\"]*)(?=\")|(?<=,|^)([^,]*)(?=,|$)");
Run Code Online (Sandbox Code Playgroud)
再次表达的是:
(?<=")([^"]*)(?=")|(?<=,|^)([^,]*)(?=,|$)
Run Code Online (Sandbox Code Playgroud)
而不是期望的结果
the quick
brown, fox jumps
over
the
lazy dog
Run Code Online (Sandbox Code Playgroud)
现在我得到了这个细分:
the quick
"brown
fox jumps"
,over,
"the"
,,
"lazy dog"
Run Code Online (Sandbox Code Playgroud)
我错过了什么?
是否有任何Java开源库支持CSV的多字符(即长度> 1的字符串)分隔符(分隔符)?
根据定义,CSV =逗号分隔值数据,单个字符(',')作为分隔符.但是,存在许多其他单字符替代方案(例如,制表符),使CSV代表"字符分隔值"数据(本质上,DSV:分隔符分隔值数据).
用于CSV的主要Java开源库(例如,OpenCSV)几乎支持任何字符作为分隔符,但不支持字符串(多字符)分隔符.所以,对于用"|||"这样的字符串分隔的数据 除了预处理输入以便将字符串转换为单字符分隔符之外别无选择.从那时起,数据可以解析为单字符分隔值.
因此,如果有一个本地支持字符串分隔符的库,那将是很好的,因此不需要预处理.这意味着CSV现在标记为"CharSequence-Separated Values"数据.:-)
我正在研究一个csv解析器,我想分别读取头文件和其余的csv文件.这是我读取csv的代码.
当前代码读取csv文件中的所有内容,但我需要单独读取标头.请帮我解决这个问题.
public class csv {
private void csvRead(File file)
{
try
{
BufferedReader br = new BufferedReader( new FileReader(file));
String strLine = "";
StringTokenizer st = null;
File cfile=new File("csv.txt");
BufferedWriter writer = new BufferedWriter(new FileWriter(cfile));
int tokenNumber = 0;
while( (strLine = br.readLine()) != null)
{
st = new StringTokenizer(strLine, ",");
while(st.hasMoreTokens())
{
tokenNumber++;
writer.write(tokenNumber+" "+ st.nextToken());
writer.newLine();
}
tokenNumber = 0;
writer.flush();
}
}
catch(Exception e)
{
e.getMessage();
}
}
Run Code Online (Sandbox Code Playgroud) 在我写的程序中,我希望能够导入CSV文件.目前,它需要一个基本的文本文件.
File mainemails = new File ("mainemails.txt");
Run Code Online (Sandbox Code Playgroud)
我知道使用File进行CSV导入可能不是最节省时间的事情.导入CSV文件的最有效方法是什么?我是否必须下载任何新库以使用有效的方法?
我有这个文本文件,其中包含地图上不同点的纬度和经度值.
我如何将我的弦乐分成纬度和经度?与其他分隔符(如空格或制表符等)一起执行这些类型的事物的一般方法是什么?样本文件:
28.515046280572285,77.38258838653564
28.51430151808072,77.38336086273193
28.513566177802456,77.38413333892822
28.512830832397192,77.38490581512451
28.51208605426073,77.3856782913208
28.511341270865113,77.38645076751709
Run Code Online (Sandbox Code Playgroud)
这是我用来从文件中读取的代码:
try(BufferedReader in = new BufferedReader(new FileReader("C:\\test.txt"))) {
String str;
while ((str = in.readLine()) != null) {
System.out.println(str);
}
}
catch (IOException e) {
System.out.println("File Read Error");
}
Run Code Online (Sandbox Code Playgroud)