我有关于使用StringBuilder的性能相关问题.在一个很长的循环中,我正在操纵a StringBuilder并将其传递给另一个方法,如下所示:
for (loop condition) {
StringBuilder sb = new StringBuilder();
sb.append("some string");
. . .
sb.append(anotherString);
. . .
passToMethod(sb.toString());
}
Run Code Online (Sandbox Code Playgroud)
StringBuilder在每个循环周期实例化是一个很好的解决方案吗?并且更好地调用删除,如下所示?
StringBuilder sb = new StringBuilder();
for (loop condition) {
sb.delete(0, sb.length);
sb.append("some string");
. . .
sb.append(anotherString);
. . .
passToMethod(sb.toString());
}
Run Code Online (Sandbox Code Playgroud) 我有一个条件,StringBuilder保持存储与大平面文件(100的MB)模式匹配的行.但是在达到条件后,我将StringBuilder varialble的内容写入文本文件.
现在我想知道是否应该通过重置对象来使用相同的变量 - >
stringBuilder.delete(0,stringBuilder.length())
Run Code Online (Sandbox Code Playgroud)
要么
stringBuilder=new StringBuilder();
Run Code Online (Sandbox Code Playgroud)
请提出一下,就性能和OOM问题而言,您认为哪种方式更好.
我有一个管道分隔文件,我解析它以获取系统选项.环境对堆分配很敏感,我们正在尝试避免垃圾回收.
下面是我用来解析管道分隔字符串的代码.该函数调用约35000次.我想知道是否有更好的方法不能创造更多的内存流失.
static int countFields(String s) {
int n = 1;
for (int i = 0; i < s.length(); i++)
if (s.charAt(i) == '|')
n++;
return n;
}
static String[] splitFields(String s) {
String[] l = new String[countFields(s)];
for (int pos = 0, i = 0; i < l.length; i++) {
int end = s.indexOf('|', pos);
if (end == -1)
end = s.length();
l[i] = s.substring(pos, end);
pos = end + 1;
}
return l;
}
Run Code Online (Sandbox Code Playgroud)
编辑1,关于java版本:
出于商业原因,我们坚持使用JDK 1.6.0_25.
编辑2关于String和String …
可能的重复:
如何清除/清空 Java Stringbuilder
我正在向字符串添加值,然后在文本视图中显示它,但是当我刷新页面时,它不会先清除字符串。
它只是不断地添加它。
有没有办法清除android中的字符串生成器?
到目前为止我尝试过的
StringBuilder sb = new StringBuilder();
sb.delete(0,sb.length());
for (String s : awayScores)
{
sb.append(s);
sb.append("\n");
}
StringBuilder sb2 = new StringBuilder();
sb2.delete(0,sb2.length());
for (String h : homeScores)
{
sb2.append(h);
sb2.append("\n");
}
String awayeve = sb.toString();
String homeeve = sb2.toString();
Log.v("home", "homeeve" + homeeve);
Log.v("home", "awayeve" + awayeve);
Run Code Online (Sandbox Code Playgroud)