1

我有一个简单的 java 代码,它读取包含带双引号的句子的文本 csv 文件:“sentence1”、“sentence2”、“sentence3”。我想阅读其中的一些句子(例如,句子 1 和 3)。我创建了一个缓冲区阅读器,readLine()然后使用:tokens = fileLine.split(",");其中令牌是一个字符串数组。

我使用数组索引访问了我感兴趣的句子:tokens[0], tokens[3]. 问题是,我只想要没有双引号的句子。但是我的程序用“”保存了句子。如何改进解析技术,以便我可以保存没有“”的句子??

4

6 回答 6

3

怎么样String#replaceAll

theSentence = theSentence.replaceAll("\"", "");

在较新的 Java 版本中,我认为从 Java 5 开始,您也可以使用String#replace(CharSequence,CharSequence)

theSentence = theSentence.replace("\"", "");

并避免正则表达式的开销

于 2012-06-21T15:05:59.810 回答
0

您可以执行以下操作:

s = s.substring(1, s.length()-1);
tokens = s.split("\",\"");

请注意,您的实现将输入行解析 "Hello, world","second sentence" 为数组

"Hello
world"
"second sentence"

仅当您的行本身不包含(转义)引号时,上述代码才有效。

于 2012-06-21T15:08:26.383 回答
0

你可以使用方法String.replaceAll(regex, replacement)

例如:

String s = "hello world";
s = s.replaceAll("o","X");
//s now equals "hellX wXrld"

在您的情况下,您希望您的正则表达式为:"\"" 而您的替换为:""

于 2012-06-21T15:09:29.000 回答
0

如果您只想"从字符串的开头和结尾删除,您也可以这样做:

String sentence="\"my sentence\"";
System.out.println(sentence);//out->"my sentence"

sentence = sentence.substring(1,sentence.length()-1);   
System.out.println(sentence);//out->my sentence
于 2012-06-21T15:10:50.747 回答
0

作为一个比任何东西都更有趣的解决方案,而不是立即拆分,为什么不这样做呢?

String inputFromCSV; // This would have the value of what you read from the CSV.
inputFromCSV=inputFromCSV.substring(1,sentence.length()-1); 
String[] tokens = inputFromCSV.split("\",\""); // Essentially ","

实际上看着它,它并没有那么糟糕,只要你的文件保持相同的格式就可以工作。

于 2012-06-21T15:13:40.773 回答