禁則処理が実現しない
解決したいこと
ここに解決したい内容を記載してください。
"このプログラムは、句読点を行頭禁則処理するサンプル。¥n"+ "最後の行です。",8);
上記文章の禁足処理に取り組んでおります。処理後、下記のような1行8文字で「。」「¥n」「。¥n」が文章に含まれている場合、含まれている箇所で改行。句読点が行頭に来た場合は前の行に含めるといった処理を行いたいです。
このプログラムは、
句読点を行頭禁則
処理するサンプル。
最後の行です
発生している問題・エラー
出ているエラーメッセージを入力
at java.base/java.util.AbstractList.remove(AbstractList.java:167)
at StringsJaHyphenationSplitter.splitFixedLengthJaHyphenationWithLineBreakCodeAndPeriod(StringsJaHyphenationSplitter.java:49)
at StringsJaHyphenationSplitter.main(StringsJaHyphenationSplitter.java:7)
または、問題・エラーが起きている画像をここにドラッグアンドドロップ
該当するソースコード
ソースコードを入力
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class StringsJaHyphenationSplitter {
public static void main(String[] args) {
List<String> lines = splitFixedLengthJaHyphenationWithLineBreakCodeAndPeriod(
"このプログラムは、句読点を行頭禁則処理するサンプル。¥n"
+ "最後の行です。",
8);
for (String line : lines) {
System.out.println(line);
}
}
private static List<String> splitFixedLengthJaHyphenationWithLineBreakCodeAndPeriod(String str, int lineLength) {
List<String> linesList = new ArrayList<String>();
int strLength = str.length();
for (int i = 0; i < strLength; i++) {
if (str.contains("。¥n")) {
linesList = Arrays.asList(str.split("(?<=。¥n)"));
}
if (str.contains("[。、]")) {
linesList = Arrays.asList(str.split("(?<=[。、])"));
}
if (str.contains("¥n")) {
linesList = Arrays
.asList(str.split("¥n|(?<=\\G.{" + lineLength + "})"));
}
}
int lineCount = linesList.size();
for (int i = 0; i < lineCount; i++) {
String initialCharacter = String.valueOf(linesList.get(i).charAt(0));
if (initialCharacter.matches("[、。]")) {
for (int j = i; j < lineCount - 1; j++) {
String previousLine = linesList.get(j - 1);
String currentLine = linesList.get(j);
String currentLineInitial = String.valueOf(currentLine.charAt(0));
String newPreviousLine = previousLine + currentLineInitial;
String newCurrentLine = currentLine.substring(1, currentLine.length());
int springLength = linesList.get(j).length();
if (springLength > 0) {
linesList.set(j - 1, newPreviousLine);
linesList.set(j, newCurrentLine);
}
}
if (linesList.get(i).length() == 0) {
linesList.remove(i);
}
}
}
return linesList;
}
}
自分で試したこと
ここに問題・エラーに対して試したことを記載してください。
正規表現、必要の無いList配列の削除を試みましたがどちらも上手くいかず、行き詰ってしまいました。助言を頂けると幸いです。
0