Java CSV数据,不包括其他字符集之间的逗号
对于课堂作业,我使用的数据给我带来了一个小问题: 它是一个CSV,但是,cast变量也被逗号分隔,影响了我使用的.split函数。数据有一组[值,值,值,”值,值,“,值,…]。目标是排除“”中的值 当前要运行此功能,我有:Java CSV数据,不包括其他字符集之间的逗号,java,csv,Java,Csv,对于课堂作业,我使用的数据给我带来了一个小问题: 它是一个CSV,但是,cast变量也被逗号分隔,影响了我使用的.split函数。数据有一组[值,值,值,”值,值,“,值,…]。目标是排除“”中的值 当前要运行此功能,我有: while ( inFile.hasNext() ){ String delims = "[,]"; //Delimiters for seperation
while ( inFile.hasNext() ){
String delims = "[,]"; //Delimiters for seperation
String[] tokens = inFile.nextLine().split(delims); // seperation operator put in to string array
for (String token : tokens) {
System.out.println(token);
}
因为这是一个类赋值,所以我只需编写逻辑代码。 对于每个字符,决定是要将其添加到当前单词中,还是必须开始一个新词。因此,如果您处于“”状态并对此作出反应,则存储起来非常容易 像这样的
public List<String> split(String line)
{
List<String> result = new ArrayList<>();
String currentWord = "";
boolean inWord = false;
for (int i = 0; i < line.length(); i++)
{
char c = line.charAt(i);
if (c == ',' && !inWord)
{
result.add(currentWord.trim());
currentWord = "";
continue;
}
if (c == '"')
{
inWord = !inWord;
continue;
}
currentWord += c;
}
return result;
}
公共列表拆分(字符串行)
{
列表结果=新建ArrayList();
字符串currentWord=“”;
布尔inWord=false;
对于(int i=0;i
下面是一些核心正则表达式:
但我不会在作业中使用它们。我相信有一种更简单的方法可以做到这一点,但这是我提出的一种解决方案
while ( inFile.hasNext() ) {
int quote = 0;
String delims = "[,]"; //Delimiters for seperation
String[] tokens = inFile.nextLine().split(delims);
for (String token : tokens) {
if(token.contains("\"")) { //If contains a quote
quote++; //Increment quote counter
}
if (quote != 1) //If not between quotes
{
if(token.indexOf(" ") == -1) //Print if no space at beginning
{
System.out.println(token);
}
else { //Print from first character
System.out.println(token.substring(token.indexOf(" ") + 1));
}
}
}
}
inFile.close();
您好,请编辑问题并显示有问题的csv数据的示例。您提供的链接需要登录才能下载文件,这里没有人会这么做。集合[value,value,etc…]是数据集的一个示例,斜体部分是不应包含的部分,它们用“”为了便于阅读,我还将其加粗。这也取决于您使用的数据。如果每个“值”都有一个换行符,这就行不通了。只有当数据在我从描述中假设的同一行上。你链接的页面本质上是同一个问题,没有发现它。。。(至于作业,我想找一些简洁的东西用在定界上。这在我们班是允许的)