2017-01-26 3 views
0

私は以下を含むテキストファイルを持っています: ボブは "ストア"ストアに "ミルクを買う"ミルクを買うために行った。文字列から引用符で囲まれた部分文字列を削除するにはどうすればよいですか? (Regexなし)

私はstring1からすべての引用されたマテリアルを削除したいので、単にBobがミルクを購入するために店に行った。

Regexを使用せずにこれを行う方法はありますか?私は現在、split()メソッドを使用しようとしています。テキストファイルをsplit()を使用してstring1という名前のString変数に読み込み、newStringという名前の新しい文字列に値を格納し直します。

String string1 = new Scanner(new File("C:/bob.txt")).useDelimeter("\\A").next();  
String newString = ""; 

String[] arr = string1.split("\""); 
for (int i=0; i<arr.length-1; i++){ 
    newString += arr[y]; 
} 

私はJavaには非常に慣れていて、分割方法を正しく使用しているかどうかはわかりません。私がnewStringを印刷するとき、「ボブがストアに店に行って牛乳を買う店に行った」

私の問題は「ボブが牛乳を買うために店に行った」と言わなければならないということです。文字列の最後にピリオドがなくなり、「ストア」が2回書き込まれます。

誰でもこの仕事をするのに役立つことができますか? (split()よりも良い方法があれば、私は知りたいと思います。引用符で囲まれたセクションをいくつでも含む文字列を扱いたいと思います。パターンマッチング/正規表現もありません)ありがとう!

String s = "Bob blah blah \"quote\" blah \"another quote\""; 
System.out.println(s); 
String string = s.chars() 
.filter(c -> c != '"') 
.collect(StringBuilder::new, 
     StringBuilder::appendCodePoint, StringBuilder::append) 
.toString(); 
System.out.println(string); 

別のアプローチは次のようになり、単にchar配列をループし、二重引用符、例えばをスキップする:例えば

+1

なぜ正規表現を使いたくないのですか? – arshajii

+0

'String#replaceAll'メソッドの使用を推奨しましたが、正規表現を使用します。 – AntonH

+1

"私は現在split()メソッドを使用しようとしています" splitは正規表現を使用しています... – Pshemo

答えて

1

public static void main(String[] args) { 
    String str = "Bob went to \"the store\" the store to \"buy milk\" buy milk."; 
    boolean inQuotes = false; 
    StringBuilder sb = new StringBuilder(); 
    for (int i = 0; i < str.length(); i++) { 
     if (str.charAt(i) == '"') inQuotes = !inQuotes; 
     else if (!inQuotes) sb.append(str.charAt(i)); 
    } 
    System.out.println(sb.toString()); 
} 

"Bob went to the store to buy milk."の結果は、二重引用符の間にあるものだけを削除するので、to the storeto buy milkの間に二重のスペースがあることに注意してください。

+0

これは良いですが、変数sbをStringBuilderからStringに変換できますか?私が尋ねる理由は、StringTokenizerのようなものがsbで動作しないためです – HowDoICode

+0

StringBuilder.toString()を呼び出して文字列に変換する –

+0

これは素晴らしいです – HowDoICode

0

あなたは、stringcharacter arrayを通じてストリーミングとfilterを経由して二重引用符を省略するためにJava 8のstreamを使用することができます

を働くだろう
String s = "Bob blah blah \"quote\" blah \"another quote\""; 
System.out.println(s); 
StringBuilder s1 = new StringBuilder(); 
for(char c : s.toCharArray()){ 
    if(c != '"'){ 
     s1.append(c); 
    } 
} 
System.out.println(s1.toString()); 
関連する問題