我有一个简单的java代码,它读取包含双引号句子的文本csv文件:“sentence1”,“sentence2”,“sentence3”。我想读一些这些句子(例如,第1和第3句)。我创建了一个缓冲区阅读器并使用readLine()
然后使用:tokens = fileLine.split(",");
其中标记是一个字符串数组。
我使用数组索引访问了我感兴趣的句子:tokens[0]
,tokens[3]
。问题是,我只希望句子没有双引号。但我的程序用“”保存了句子。如何改进解析技术,以便我可以保存句子而不用“”?
答案 0 :(得分:3)
theSentence = theSentence.replaceAll("\"", "");
在较新的Java版本中,我认为从Java 5开始,您也可以使用String#replace(CharSequence,CharSequence)
:
theSentence = theSentence.replace("\"", "");
避免正则表达式的开销
答案 1 :(得分:0)
见 http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/String.html#replaceAll%28java.lang.String,%20java.lang.String%29 和相关问题Java equivalent of Perl's s/// operator?
答案 2 :(得分:0)
您可以执行以下操作:
s = s.substring(1, s.length()-1);
tokens = s.split("\",\"");
请注意,您的实现会解析输入行
"Hello, world","second sentence"
作为数组
"Hello
world"
"second sentence"
上述代码仅在您的行不包含(转义)引号时才有效。
答案 3 :(得分:0)
您可以使用方法String.replaceAll(regex, replacement)
。
例如:
String s = "hello world";
s = s.replaceAll("o","X");
//s now equals "hellX wXrld"
在你的情况下,你希望你的正则表达式是:“\”“ 而你的替代是:“”
答案 4 :(得分: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
答案 5 :(得分: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 ","
实际上看它,它并没有那么糟糕,并且只要你的文件保持相同的格式就会有效。