0

実際、複数行を含むファイルを読み込もうとしています。このために私はscanner.nextline()を使用しています

ただし、通常はスペースまたは行末文字が続くフォローストップ(ドット区切り)まで行を読みたいと思います。

この場合、誰かが私を助けてくれますか?

4

4 に答える 4

1

ピリオドまで検索したい場合は、 と を使用できMatcherますPattern

//Pattern p = Pattern.compile("[^\\.]*\\.(\\s+)"); 
Pattern p = Pattern.compile(".*?\\.(\\s+)");  //Anything any amount of times, 
                                              //followed by a dot and then some whitespace.

Matcher matcher = p.matcher("firstword. secondword.\n");

while(matcher.find()){
    boolean space = matcher.group(1).charAt(0) == ' ';
    System.out.println(matcher.start() + matcher.group() + "and is space: " + (space ? "TRUE" : "FALSE"));
}
  1. .*?.何にでも合います。*0 回以上一致します。レイジーマッチャーです?。これは、任意のタイプの任意の数の文字に一致しますが、最初のピリオドと空白の前で停止します (遅延演算子のため)。
  2. \\.- これはピリオドに一致します。Java では、正規表現で特殊文字を二重にエスケープする必要があります。
  3. (\\s+)- これは、空白 (改行\sを含む) に 1 回以上一致することを意味します。1 つ以上の空白文字に一致します。括弧は正規表現のこの部分を「キャプチャ」するため、正規表現で一致するたびに、括弧内の特定の部分が一致したかどうかを尋ねることができます。これにより、スペースか改行かがわかります。

matcher.group()一致した文字列を取得します。

一部のデータの途中にピリオドがある可能性があるように聞こえたので、疑問符を追加し、他のパターンをコメントアウトしました. 疑問符は「遅延」マッチングを行います。デフォルトでは、一致は貪欲で、一致する最長の文字列が使用されます。そのため、ピリオドの後に空白が続く文字列に複数の場所がある場合、そのすべてが 1 つの一致として返されます。遅延により、最初のピリオドとスペースに到達すると、任意の文字 (.*) の一致が強制的に停止されます。

于 2013-10-16T07:58:48.350 に答える
0

これを試して、

        StringBuilder stringBuilder = new StringBuilder();
        while ((line = bufferedReader.readLine()) != null)
        {
            if (line.contains(". ") || line.trim().endsWith("."))
            {
                int length = line.indexOf(". "); // get the index when the line contains dot and space in the middle
                stringBuilder.append(line.trim().endsWith(".") ? line
                        : line.substring(0, length).replace(". ", "." + System.getProperty("line.separator"))); // when the line contains dot at the end or the line may contain the dot with space
                System.out.println("stringBuilder : " + stringBuilder.toString());
                stringBuilder.delete(0, stringBuilder.toString().length());
                if (length != 0)
                {
                    stringBuilder.append(line.substring(length+2, line.length()));
                }
            }
            else
            {
                stringBuilder.append(line.replace(System.getProperty("line.separator"), " "));
            }
        }
        System.out.println("stringBuilder : "+stringBuilder.toString()); // when the last line not end with dot or not contain dot and space
于 2013-10-16T08:05:53.813 に答える
0

read() メソッドを使用して、char ごとに読み取ります。に一致している場合は、. これは改行文字です。

他の解決策は、改行文字を設定してから readline() を使用することです。私はこれを試しませんでしたが

またはファイルを一度に読み取り、string.split メソッドを使用します

于 2013-10-16T07:55:44.603 に答える