【发布时间】:2012-05-18 19:05:28
【问题描述】:
我想问如何解析字符串并每 100 个字符添加一个换行符 (\n)。
我知道您可以使用正则表达式解析字符串,但不知道以后如何进行。有人可以帮忙吗?
【问题讨论】:
-
将您拥有的代码发布给我们,我们将从那里为您提供帮助。
我想问如何解析字符串并每 100 个字符添加一个换行符 (\n)。
我知道您可以使用正则表达式解析字符串,但不知道以后如何进行。有人可以帮忙吗?
【问题讨论】:
字符串不需要通过正则解析,直接拆分即可。
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();
【讨论】:
\n,也没有按照 OP 的要求进行操作。
我认为这比 % 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());
}
虽然未经测试
【讨论】:
bit faster than % 100 的假设是没有根据的并且是错误的如果它没有经过测试并与这里的其他解决方案进行比较,或者您可能知道。
因为您不能在 Java 中向常规 String 添加更多字符。您应该使用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();
【讨论】:
i = 0 处添加一个\n。看我的帖子。
i 并一次添加一个字符?一次添加一个完整的块不是更容易吗? (见我的帖子)
我建议使用 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();
希望对您有所帮助!如果您需要更多解释,请告诉我!
【讨论】:
可以试试这个吗?
String stringToParse = "abcde";
for(int i = 0; i < stringToParse.size(); i = i + 100){
stringToParse = ((StringBuffer) stringToParse ).insert(i, "\n").toString();
}
【讨论】:
i 处的\n 替换字符。此外,Java String 不能被索引。
很简单:
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();
【讨论】:
你可以这样做:
String str = "....";
String parsedStr = str.replaceAll("(.{100})", "$1\n");
这会将每 100 个字符替换为相同的 100 个字符,并在末尾添加一个新行。
(.{100}) 将捕获一组 100 个字符。第二个中的$1 将放群组的内容。然后\n 将附加到刚刚匹配的 100 个字符中。
【讨论】: