2012-06-21 25 views
1

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

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

+0

使用csv解析器(有很多,包括开源解决方案) - 它会让你的生活更轻松(http://stackoverflow.com/questions/200609/can-you-recommend-a-java-library-for -reading-和可能的写作,CSV文件)。 – assylias

回答

3

如何String#replaceAll

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

在新的Java版本,我想从Java 5,你可以使用String#replace(CharSequence,CharSequence)还有:

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

,并避免正则表达式的开销

+3

I * think * theSentence.replace(“\”“,”“);运作良好。如果我错了,请纠正我。 – BlackVegetable

+1

@BlackVegetable - 你说得对,我只是编辑了答案,但是这个不可用在较旧的Java版本中。 – MByD

0

你可以做到以下几点:

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

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

"Hello 
world" 
"second sentence" 

上面的代码只能如果你的行不包含(逃脱)引用他们自己。

0

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

例如:

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

在你的情况,你会希望你的正则表达式为:“\”” 而你替换为:‘’

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 
0

作为比任何一个有趣的解决方案,而不是splittin g马上,为什么不这样做?

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 "," 

其实看着它,它不是那么糟糕,并且将工作,只要你的文件保持相同的格式。