実際、複数行を含むファイルを読み込もうとしています。このために私はscanner.nextline()を使用しています
ただし、通常はスペースまたは行末文字が続くフォローストップ(ドット区切り)まで行を読みたいと思います。
この場合、誰かが私を助けてくれますか?
実際、複数行を含むファイルを読み込もうとしています。このために私はscanner.nextline()を使用しています
ただし、通常はスペースまたは行末文字が続くフォローストップ(ドット区切り)まで行を読みたいと思います。
この場合、誰かが私を助けてくれますか?
ピリオドまで検索したい場合は、 と を使用でき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"));
}
.*?
・.
何にでも合います。*
0 回以上一致します。レイジーマッチャーです?
。これは、任意のタイプの任意の数の文字に一致しますが、最初のピリオドと空白の前で停止します (遅延演算子のため)。\\.
- これはピリオドに一致します。Java では、正規表現で特殊文字を二重にエスケープする必要があります。(\\s+)
- これは、空白 (改行\s
を含む) に 1 回以上一致することを意味します。1 つ以上の空白文字に一致します。括弧は正規表現のこの部分を「キャプチャ」するため、正規表現で一致するたびに、括弧内の特定の部分が一致したかどうかを尋ねることができます。これにより、スペースか改行かがわかります。matcher.group()
一致した文字列を取得します。
一部のデータの途中にピリオドがある可能性があるように聞こえたので、疑問符を追加し、他のパターンをコメントアウトしました. 疑問符は「遅延」マッチングを行います。デフォルトでは、一致は貪欲で、一致する最長の文字列が使用されます。そのため、ピリオドの後に空白が続く文字列に複数の場所がある場合、そのすべてが 1 つの一致として返されます。遅延により、最初のピリオドとスペースに到達すると、任意の文字 (.*) の一致が強制的に停止されます。
これを試して、
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
read() メソッドを使用して、char ごとに読み取ります。に一致している場合は、. これは改行文字です。
他の解決策は、改行文字を設定してから readline() を使用することです。私はこれを試しませんでしたが
またはファイルを一度に読み取り、string.split メソッドを使用します