Java 在txt文件的三个字符串之间使用逗号作为分隔符。但文件中的某些行在第二个字符串中有逗号

Java 在txt文件的三个字符串之间使用逗号作为分隔符。但文件中的某些行在第二个字符串中有逗号,java,Java,有一个file.txt文件包含: 国家、省/州、市 所以我想用“,”作为分隔符。但是,此文件的某些行具有: 国家,“名称1和名称2,省”,城市 因此,使用逗号作为分隔符不会像上面的示例那样在省名称中使用逗号 这是我的代码: String path = workingDir + "/src/main_pkg/File.txt"; File file = new File(path); Scanner sc = null; try { sc = new Sca

有一个file.txt文件包含:

国家、省/州、市

所以我想用“,”作为分隔符。但是,此文件的某些行具有:

国家,“名称1和名称2,省”,城市

因此,使用逗号作为分隔符不会像上面的示例那样在省名称中使用逗号

这是我的代码:

String path = workingDir + "/src/main_pkg/File.txt";
    File file = new File(path);
    Scanner sc = null;
    try {
        sc = new Scanner(file);
    } catch (FileNotFoundException e) {
        System.out.println(new File("."));
        e.printStackTrace();
    }
    ObservableList<String> listOfProvinces = FXCollections.observableArrayList();
    String country;
    String state= "";
    String lastState = "";
    sc.useDelimiter(",");
    while (sc.hasNext()) {
        country = sc.next();
        province = sc.next();

        if (country.matches(countryComboBox.getValue())) {
            if (!province.matches(lastState)) {
                listOfStates.add(state);
                lastState = state;
            }
        }
        sc.nextLine();
    }
    sc.close();
String path=workingDir+“/src/main\u pkg/File.txt”;
文件=新文件(路径);
扫描仪sc=空;
试一试{
sc=新扫描仪(文件);
}catch(filenotfounde异常){
System.out.println(新文件(“.”);
e、 printStackTrace();
}
ObservableList listOfProvinces=FXCollections.observableArrayList();
弦国;
字符串状态=”;
字符串lastState=“”;
sc.useDelimiter(“,”);
while(sc.hasNext()){
国家=sc.next();
省=sc.next();
if(country.matches(countryComboBox.getValue())){
如果(!provider.matches(lastState)){
添加(状态);
lastState=状态;
}
}
sc.nextLine();
}
sc.close();

为了澄清,我无法修改txt文件。

我找到了解决方案。我必须将分隔符更改为:

sc.useDelimiter("(?!\"),(?!\")");

我从中得到的答案是:从中得到的答案也很有效,但它使我的程序运行时间更长。

我找到了解决方案。我必须将分隔符更改为:

sc.useDelimiter("(?!\"),(?!\")");

我从中得到的答案是:来自的答案也有效,但它使我的程序运行时间更长。

文件的格式是“CSV”(逗号分隔值),允许双引号字符串在值中包含逗号。只需搜索用于Java的CSV阅读库(Stackoverflow不建议使用库或外部资源),扫描仪用于简单任务。您可以尝试使用技巧从文本中查找分隔符,但最好使用regexp find。我本来打算写一个答案,但我认为上面的埃尔文说对了,CSV解析器才是你真正想要的。谢谢@ErwinBolwidt(和Maarten),我根据你的想法做了一些搜索,发现了这篇文章:其中有我需要的解决方案应该作为答案发布,而不是问题的补充。使用实际的csv解析器还是比较好的。是的,阅读csv并不难,但要想正确阅读也很难。例如,带引号的字符串可以包含表示单个引号的双引号。您最好使用经过测试的库。您的文件格式为“CSV”(逗号分隔值),允许双引号字符串在值中包含逗号。只需搜索用于Java的CSV阅读库(Stackoverflow不建议使用库或外部资源),扫描仪用于简单任务。您可以尝试使用技巧从文本中查找分隔符,但最好使用regexp find。我本来打算写一个答案,但我认为上面的埃尔文说对了,CSV解析器才是你真正想要的。谢谢@ErwinBolwidt(和Maarten),我根据你的想法做了一些搜索,发现了这篇文章:其中有我需要的解决方案应该作为答案发布,而不是问题的补充。使用实际的csv解析器还是比较好的。是的,阅读csv并不难,但要想正确阅读也很难。例如,带引号的字符串可以包含表示单个引号的双引号。等等。使用经过测试的库会更好。