2016-05-13 21 views
0

SAX DefaultHandlerを拡張したクラスを作成しました。タグの間で値を取得するには、私が行いますSAX DefaultHandlerに暗黙の改行を無視させる方法を教えてください。

private static class MyHandler extends DefaultHandler { 
    private String str; 
    @Override 
    public void characters(char ch[], int start, int length) throws 
    SAXException { 
      String current = new String(ch, start, length); 
      str+=current; 
     } 
    } 

これは、終了タグが同じ行にある場合に動作しますが、XMLは次のように見える場合:

を:それはとしてレンダリング

<string name="sentence">The fox runs\nover the hill into the pasture 
    </string> 

"The fox runs\nover the hill into the pasture 
    " 

代わりの

"the fox runs 
over the hill into the pasture" 

I文字列が「狐が牧草地に丘を走らせる\ n」のように見えるので、trim()は使用できません。

答えて

1

ここで重要なことは、タグ内の空白が重要かどうかです。それが重要でない場合は余分な余白を取り除くことができます。そしてこれは簡単な正規表現で行うことができます。

str += current.replaceAll("\\s{2,}$", "") 

それは、少なくとも2つの空白が含まれている場合は、この正規表現は、行の末尾に(それはスペース+改行や他の組み合わせで)行をトリミングします。行がすべて空白の場合、それは完全に削除されます。それは変わらない

キツネを残すだろうしかし

は\ nover、ユーザーが誤って\n\nを入力するだけではなく\n状況を処理したい場合は牧草\ nを

に丘を実行しますあなたは少し変更することができます

str += current.replaceAll("\\s{2,}$", "\n") 
+0

空白は明示的な "\ n"を含みます。ユーザーがキャリッジリターンを入力したことによる単なる改行である場合、明示的な改行「\ n」と改行を開始するだけの区別が可能ですか?この場合はタグを閉じますか? – Marc

+0

私はあなたからのコメントに返信するのを忘れてしまったことに気付きました。あなたはそれを整理することができましたか? – e4c5

関連する問題