14

\n文字列を解析し、 100 文字ごとに改行 () を追加する方法を知りたいと思いました。正規表現で文字列を解析できることは知っていますが、後で続行する方法がわかりません。誰か助けてくれませんか?

4

7 に答える 7

80

次のようなことができます。

String str = "....";
String parsedStr = str.replaceAll("(.{100})", "$1\n");

これにより、100 文字ごとに同じ 100 文字に置き換えられ、最後に新しい行が追加されます。

は 100 文字の(.{100})グループをキャプチャします。2 番目の$1は、グループのコンテンツを配置します。は\n、一致した 100 文字に追加されます。

于 2012-05-10T08:29:15.907 に答える
4

非常に単純に:

StringBuilder sb = new StringBuilder();
for (int i = 0; i < str.length(); i++) {
    if (i > 0 && (i % 100 == 0)) {
        sb.append("\n");
    }

    sb.append(str.charAt(i));
}

str = sb.toString();
于 2012-05-10T08:30:01.193 に答える
1

正規表現を介して文字列を解析する必要はありません。分割するだけで済みます。

String s = "your very long String";
String[] splited = new String[s.size() / 100 + 1];
for (int i = 0; i < splited.length(); i++) {
  splited[i] = s.subString(0, 100);
  s = s.subString(100);
}

編集

StringBuilder sb = new StringBuilder();
for(int i = 0; i< splited.size(); i++) {
  sb.append(splited[i]);
  sb.append("\n");
}
String stringWithNewLines = sb.toString();
于 2012-05-10T08:28:38.760 に答える
1

これは % 100 と繰り返し追加するよりも少し速いと思います

function(String input) {
    // array represantation of the String
    final char[] inputArray = input.toCharArray();
    // same length + amount of newlines (i.e. length / 100)
    final char[] outputArray = new char[inputArray.length + (inputArray.length/100)];
    int i = 0;
    int o = 0;
    while(i < inputArray.length) {
        // copy every 100th substring
        System.arraycopy(inputArray,i,outputArray,o,100);
        i += 100;
        o += 101;
        outputArray[o] = '\n';
    }
    // copy rest
    if(i < inputArray.length) {
        System.arraycopy(inputArray,i,outputArray,o,inputArray.length-i);
    }
    return(outputArray.toString());
}

テストされていませんが

于 2012-05-10T08:41:49.670 に答える
1

StringBuilder を使用することをお勧めします。それは効率的で、あなたの仕事にぴったり合うことができます。

String originalString = ... ;

// The new length of the string is
int newLength = originalString.length() +(int) Math.ceil ( originalString.length() / 100.0 );

StringBuilder builder = new StringBuilder ( newLength );

何が起こっているのかを簡単に確認できるように、文字列の各 100 文字部分を「チャンク」と呼びます。

int chunkStart = 0;

while ( chunkStart < originalString.length() )
{
    // We find the index of the end of the chunk.
    int endOfThisChunk = Math.min ( chunkStart + 100, originalString.length() );

    // and this chunk to builder
    builder.append ( originalString.substring( chunkStart, endOfThisChunk ) );

    // append the new line character
    builder.append ( '\n' );

    // set the next spot for chunkStart
    chunkStart = endOfThisChunk;
}

return builder.toString();

それが役立つことを願っています! さらに説明が必要な場合は、お知らせください。

于 2012-05-10T08:36:45.637 に答える
1

おそらくこれを試すことができますか?

String stringToParse = "abcde";

for(int i = 0; i < stringToParse.size(); i = i + 100){
   stringToParse = ((StringBuffer) stringToParse ).insert(i, "\n").toString();
}
于 2012-05-10T08:26:25.750 に答える
0

Javaの通常の文字列に文字を追加することはできないためです。これを行うには、 StringBufferを使用する必要があります。

forループを使用して文字列をループし、100文字ごとに次のようにループできます。

String string = "Some long string ...";
StringBuffer buffer = new StringBuffer();

for(int i = 0; i < string.length(); i++) {
    // Append a \n after every 100th character.
    if((i > 0) && (i % 100) == 0) {
        buffer.append("\n");
    }
    // Just adds the next character to the StringBuffer.
    buffer.append(string.charAt(i));
}

String parsedString = buffer.toString();
于 2012-05-10T08:31:41.143 に答える