Javaでテキストファイルを単一ユニットとして表し、テキスト内の文字列を一致させる
-
03-07-2019 - |
質問
テキストファイル(またはXMLファイル)を文字列全体として表し、その中の特定の文字列を検索(または一致)するにはどうすればよいですか?
BufferedReaderオブジェクトを作成しました:
BufferedReader input = new BufferedReader(new FileReader(aFile));
そして、次のように、異なるデリミタを指定するオプションを備えたScannerクラスを使用しようとしました:
//Scanner scantext = new Scanner(input);
//Scanner scantext = new Scanner(input).useDelimiter("");
Scanner scantext = new Scanner(input).useDelimiter("\n");
while (scantext.hasNext()) { ... }
このようにScannerクラスを使用すると、テキストを1行ずつ、または単語ごとに読むことができますが、私が処理したいテキストには時々あるので、助けにはなりません
</review><review>
そして言いたいのは:<!> quot; <review>
<!> quot;を見つけたらテキスト内の任意の場所で、<!> quot; </review>
<!> quot;が見つかるまで、次の行(またはテキスト)で何かを行います。問題は、<=>と<=>がテキスト内の異なる場所にあり、時には他のテキストに接着されていることです(したがって、区切り文字としての空のスペースは役に立たない)。
Javaの正規表現API(PatternクラスとMatcherクラス)を使用する可能性があると考えましたが、特定の文字列または行に一致するようで、テキストを1つの連続した文字列(少なくともこれ私がそれらについて読んだことからの私の印象でした)。この場合に使用する必要がある構造/メソッド/クラスを教えてください。ありがとう。
解決
正規表現でXMLを解析しようとしないでください。それは痛みだけにつながります。多くの非常に良い 既存 XML JavaのAPI は既に。なぜそれらを再発明しようとするのですか?
とにかく、テキストファイル内の文字列を検索するには、次のようにする必要があります。
- ファイルを文字列としてロードします(例)
-
Pattern
を作成しますa>検索する -
Matcher
を使用しますa>一致を反復処理する
他のヒント
構造化されたxmlファイルを操作しようとしているように見えますが、 javax.xml.parsers.DocumentBuilder またはその他のビルトイン API でドキュメントを解析します。
XMLパーサーを使用します。
または、例のように、xpathを使用します。
Javaの正規表現API(PatternクラスとMatcherクラス)を使用する可能性があると考えましたが、特定の文字列または行に一致するようであり、テキストを1つの連続した文字列にしたいです
ええと、XMLファイルを文字列に読み取ってから、正規表現APIを使用して操作することを妨げるものがありますか?
ファイルを文字列に簡単に読み込むことができます。 Apache readFileToString(File file, String encoding)
。
XML解析APIを使用することもお勧めしますが、<!> quot; review <!> quot;の場合にのみ何かをしたいので、タグ、DOMよりもSAXの方が使いやすいかもしれません...
ここで、テキストファイル内の個々の行を文字列にコピーしてから、部分文字列(検索文字列)と文字列(行)を一致させることができると思います
ただし、/や#などのメタ文字の実行中にエラーが発生します。