私は現在、このコードを使用して行を20文字に制限しています。
if (string.length() % 20 == 0 && string.length() >= 20) {
this.string += "\n";
}
ただし、次のような単語は壊れます。
Hello, my name is Pa
trick
どうすればこれを防ぐことができますか?
私は現在、このコードを使用して行を20文字に制限しています。
if (string.length() % 20 == 0 && string.length() >= 20) {
this.string += "\n";
}
ただし、次のような単語は壊れます。
Hello, my name is Pa
trick
どうすればこれを防ぐことができますか?
このような正規表現を使用して.{1,20}(\W|$)
、単語を分割せずに20文字に近いフレーズを分割できます。
これは最大20文字で機能します。"(.{1," + max + "}(\\W|$))"
数値を構成する場合は、制限がどこにあるかなどの正規表現でパラメーター化できますmax
。
String s = "Hello, my name is Patrick and I have a lot to say, but I will tell you that another day.";
Matcher m = Pattern.compile("(.{1,20}(\\W|$))").matcher(s);
StringBuilder b = new StringBuilder();
while (m.find()) {
b.append(m.group()).append("\n");
}
System.out.println("-> " + b.toString());
印刷されます:
-> Hello, my name is
Patrick and I have a
lot to say, but I
will tell you that
another day.
編集
私は上記の答えを編集しました。実際、それは単語\W
ではなく文字を検索していました。私の例では、文字列はaで終わりました.
が、あなたのものではありませんでした。\W
上記の正規表現を編集して、文字列の最後に。を使用して条件を追加することにより、文字列がで表されていない文字で終了する場合にも機能するようにしました$
。
ここで実行可能な例を見ることができます:http://ideone.com/Nw2aNr
文字列をスペースで分割しs.split("\\s+")
、行の長さを監視しながら単語ごとに追加します。
これは、文字が追加されるたびに発生するコードの一部だと思います。したがって、これを修正するには、さらに興味深いことを行う必要があります。基本的な考え方は次のとおりです。
String words[] = line.split("\\s+");
lastIndexOf(words[words.length - 1]);
します。これにより、最後の単語を除くすべてが保持されます。