2012-06-21 60 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 "," 

其實看着它,它不是那麼糟糕,並且將工作,只要你的文件保持相同的格式。