Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java-解析字符串并每隔100个字符添加换行符_Java_Regex - Fatal编程技术网

Java-解析字符串并每隔100个字符添加换行符

Java-解析字符串并每隔100个字符添加换行符,java,regex,Java,Regex,我想问一下如何解析字符串并每100个字符添加一个换行符(\n)。 我知道可以用正则表达式解析字符串,但不知道以后如何继续。有人能帮忙吗?也许可以试试这个 String stringToParse = "abcde"; for(int i = 0; i < stringToParse.size(); i = i + 100){ stringToParse = ((StringBuffer) stringToParse ).insert(i, "\n").toString(); }

我想问一下如何解析字符串并每100个字符添加一个换行符(
\n
)。
我知道可以用正则表达式解析字符串,但不知道以后如何继续。有人能帮忙吗?

也许可以试试这个

String stringToParse = "abcde";

for(int i = 0; i < stringToParse.size(); i = i + 100){
   stringToParse = ((StringBuffer) stringToParse ).insert(i, "\n").toString();
}
stringToParse=“abcde”;
对于(int i=0;i
无需通过正则表达式解析字符串,只需拆分即可

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);
}
String s=“您的超长字符串”;
String[]splited=新字符串[s.size()/100+1];
对于(int i=0;i
编辑

StringBuilder sb = new StringBuilder();
for(int i = 0; i< splited.size(); i++) {
  sb.append(splited[i]);
  sb.append("\n");
}
String stringWithNewLines = sb.toString();
StringBuilder sb=新建StringBuilder();
对于(int i=0;i
您可以这样做:

String str = "....";
String parsedStr = str.replaceAll("(.{100})", "$1\n");
这将用相同的100个字符替换每100个字符,并在末尾添加一行新行

(.{100})
将捕获一组100个字符。第二个中的
$1
将放置组的内容。然后将
\n
添加到刚刚匹配的100个字符中。

非常简单:

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();
StringBuilder sb=新建StringBuilder();
对于(int i=0;i0&(i%100==0)){
某人附加(“\n”);
}
某人附加(str.charAt(i));
}
str=sb.toString();

因为在Java中,您不能只向正则表达式添加更多字符。您应该使用

您可以使用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();
String String=“一些长字符串…”;
StringBuffer=新的StringBuffer();
对于(int i=0;i0)&(i%100)==0){
buffer.append(“\n”);
}
//只需将下一个字符添加到StringBuffer。
append(string.charAt(i));
}
String parsedString=buffer.toString();

我建议使用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();
int chunkStart=0;
while(chunkStart

希望有帮助!如果你需要更多的解释,请让我知道

我认为这比%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());
}
函数(字符串输入){
//字符串的数组表示
final char[]inputArray=input.toCharArray();
//相同长度+换行数(即长度/100)
最终字符[]输出数组=新字符[inputArray.length+(inputArray.length/100)];
int i=0;
INTO=0;
while(i


虽然未经测试

将您拥有的代码发布给我们,我们将从中帮助您。这绝对错误,您只是在索引
i
处用
\n
替换字符。此外,无法索引Java字符串。OP没有尝试修改原始数据。这不管用。我可能应该在打字前把眼睛里的睡眠清理干净!现在编辑答案。你能隐式地将字符串转换为StringBuffer吗?会导致很大的开销。创建一个StringBuffer(或者更好的StringBuilder)并插入换行符;然后转换回stringSplit,然后呢?如何添加新行并稍后加入?是否测试了代码?我仍然可以看到(更新的代码)您从未放入
\n
,也没有执行OP要求的操作。我将子字符串保存在数组中。重新组合并添加新行几乎是件琐事,但我编辑了我的答案。奇怪的是,以前从未想过。。。真聪明。非常聪明的解决方案+我喜欢它。很好的解决方案。我真的应该花点时间来理解正则表达式+1@TheEliteGentleman:我几个月前才发现,我想我是第一次在SO上看到它。@T.Grottker:谢谢你的评论。它将在
I=0
处添加一个
\n
。请看我的帖子。愚蠢的我,谢谢你的评论。为什么要遍历每个
i
并一次添加一个字符?一次添加一个完整的块不是更容易吗?(见我的帖子)没那么快想到。不错,不错。我做了一个稍微不同的方法,不遍历每个索引。那么你认为它比%100快一点的假设是没有根据的,如果没有经过测试并与其他解决方案进行比较,或者你可能知道的话,那么它是错误的。我说我认为不是这样的。因为op想要一个正则表达式解决方案,而我的答案只是另一个选择,所以我认为没有必要进行测试。我只是想暗示,不是冒犯