0

次の内容のファイルがあるとします。

11:17 GET this is my content #2013
11:18 GET this is my content #2014
11:19 GET this is my content #2015

Scanner`String line = scanner.nextLine(); の特定の部分を使用して無視するにはどうすればよいですか?

私が望む結果は次のようになります。

this is my content
this is my content
this is my content

したがって、最初から GET まですべてをトリップしてから、# char まですべてを取得したいと思います。

これはどのように簡単に行うことができますか?

4

5 に答える 5

0

私の意見では、あなたの問題に対する最善の解決策はJava regexを使用することです。正規表現を使用すると、取得するテキストのグループと、どの種類のテキストがどこに来るかを定義できます。私は長い間Javaを扱っていないので、頭のてっぺんからあなたを助けようとします。私はあなたに正しい方向へのポイントを与えようとします。

まず、パターンをコンパイルします。

Pattern pattern = Pattern.compile("^\d{1,2}:\d{1,2} GET (.*?) #\d+$", Pattern.MULTILINE);

正規表現の最初の部分は、1 桁または 2 桁の数字の後にコロンが続き、さらに 1 桁または 2 桁の数字が続くことを期待していることを示しています。その後に GET が続きます (これらの単語が必要な場合は GET|POST を使用でき、任意の単語が必要な場合は \w+? を使用できます)。次に、必要なグループを括弧で定義します。最後に、ハッシュと、少なくとも 1 桁の任意の桁数を入力します。DOTALL フラグと CASE_INSENSITIVE フラグを設定することを検討するかもしれませんが、必要になるとは思いません。

次に、マッチャーを続行します。

Matcher matcher = pattern.matcher(textToParse);
while (matcher.find())
{
    //extract groups here
    String group = matcher.group(1);
}

whileループでは、括弧で選択したグループ内のテキスト (抽出したいテキスト) を見つけるために使用できますmatcher.group(1)matcher.group(0)これは、現在探しているものではありません (私は推測します)。

コードにエラーがある場合は申し訳ありませんが、テストされていません。これがあなたを正しい軌道に乗せることを願っています。

于 2013-10-01T09:51:09.527 に答える
0

このかなり柔軟なソリューションを試すことができます:

Scanner s = new Scanner(new File("data"));
Pattern p = Pattern.compile("^(.+?)\\s+(.+?)\\s+(.*)\\s+(.+?)$");
Matcher m;
while (s.hasNextLine()) {
    m = p.matcher(s.nextLine());
    if (m.find()) {
        System.out.println(m.group(3));
    }
}

このコードは、すべての行の最初、2 番目、および最後の単語を印刷する前に無視します。

利点は、特定の文字列リテラルではなく空白に依存してストリッピングを実行することです。

于 2013-10-01T09:53:16.787 に答える