是否有一种快速简便的方法来摆脱StringBuilder目前的含义?
我正在寻找一个Clear()方法,但我找不到它.;)
我愿意
stringBuilderObject = ""
Run Code Online (Sandbox Code Playgroud)
或类似的规定.
我在Java中循环一个ResultSet; 出于测试目的,每行返回约30行,每列有17列(所有字符串数据).我正在使用StringBuilder从结果中手动构建XML String,并且它实际上花了大约36秒来完成循环以完成这些迭代.
注意:我意识到这不是从数据库中获取XML的最佳方式,甚至是从ResultSet中获取XML的最佳方法 - 但这让我对无论如何都会表现缓慢感到好奇.
更新:根据目前为止的响应,我必须解决以下问题:运行查询的时间不到一秒,我在代码的每个部分之前和之后都执行了System.currentTimeMillis()以缩小范围.36秒完全在下面的代码中.
ResultSetMetaData rsmeta = rset.getMetaData();
StringBuilder resultBuilder = new StringBuilder();
resultBuilder.append("<?xml version=\"1.0\" ?><ROWSET>");
if(numColumns != 0){
while (rset.next()) {
resultBuilder.append("<ROW>");
for (int i = 0; i <= numColumns -1;i++) {
columnName = rsmeta.getColumnName(i+1);
resultBuilder.append("<");
resultBuilder.append(columnName);
resultBuilder.append(">");
resultBuilder.append(rset.getString(i+1));
resultBuilder.append("</");
resultBuilder.append(columnName);
resultBuilder.append(">");
}
resultBuilder.append("</ROW>");
numRows += 1;
}
}
else {
stmt.close();
wsConn.close();
return "No Results";
}
Run Code Online (Sandbox Code Playgroud)
更新:根据我收到的建议 - 此代码大约花费相同的时间或花费半秒钟.
StringBuilder resultBuilder = new StringBuilder();
resultBuilder.append("<?xml version=\"1.0\" ?><ROWSET>");
if(numColumns != 0){
while (rset.next()) { …Run Code Online (Sandbox Code Playgroud) 我试图根据DB生成的序列号(Y)创建一个经过良好优化的代码位来创建长度为X位的数字(其中X是从运行时属性文件中读取的),然后使用一个文件夹保存文件时的-name.
到目前为止,我已经提出了三个想法,其中最快的是最后一个,但我很欣赏人们可能对此提出的任何建议......
1)实例化具有初始容量X的StringBuilder.追加Y.当长度<X时,在零位置插入零.
2)实例化具有初始容量X的StringBuilder.当长度<X时,追加零.根据StringBuilder值创建DecimalFormat,然后在需要时格式化数字.
3)创建Math.pow(10,X)的新int并添加Y.对新数字使用String.valueOf(),然后对其进行子串(1).
第二个显然可以分为外环和内环部分.
那么,有什么提示吗?使用10,000次迭代的for循环,我从前两个获得类似的时序,第三个方法大约快十倍.这看起来是否正确?
完整的测试方法代码如下......
// Setup test variables
int numDigits = 9;
int testNumber = 724;
int numIterations = 10000;
String folderHolder = null;
DecimalFormat outputFormat = new DecimalFormat( "#,##0" );
// StringBuilder test
long before = System.nanoTime();
for ( int i = 0; i < numIterations; i++ )
{
StringBuilder sb = new StringBuilder( numDigits );
sb.append( testNumber );
while ( sb.length() < numDigits )
{
sb.insert( 0, 0 );
}
folderHolder = sb.toString();
} …Run Code Online (Sandbox Code Playgroud) 我正在解析十进制格式的网格坐标.我想将模式匹配存储在StringBuilder数组中以便进一步操作.但是,在每个while循环中调用append()时,我得到一个空指针.
String coordinateExample = "N14585928W084144340";
this.parseCoordinate(coordinateExample);
...
public void parseCoordinate(String coordinateString) {
int i = 0;
//extract NSEW leading characters
Pattern pL = Pattern.compile("[A-Z]");
Matcher m = pL.matcher(coordinateString);
StringBuilder[] hemisphere = new StringBuilder[]{};
while (m.find()) {
hemisphere[i].append(m.group());
//System.out.println("m.group(): " + m.group());
i++;
}
// reset i
i = 0;
//extract decimal degree digits
Pattern pN = Pattern.compile("[0-9]++");
Matcher n = pN.matcher(coordinateString);
StringBuilder[] coordinate = new StringBuilder[]{};
while (n.find()) {
coordinate[i].append(n.group());
//System.out.println("q.group(): " + n.group());
i++;
}
}
Run Code Online (Sandbox Code Playgroud) 鉴于以下代码段,我有一个小问题:
StringBuilder stringBuild = new StringBuilder(3);
stringBuild.append("hello");
System.out.println(stringBuild+2); // if I omit the (+2) bit hence only stringBUild it works
Run Code Online (Sandbox Code Playgroud)
是否toString()仅在某些情况下自动调用对象?(情况:根本没有操作或以前的字符串继承)
我试图从字符串中删除一些不需要的字符.我正在使用.txt文件,我想删除文件中的所有逗号.当我使用deletCharAt()时,它会删除多个char.以下是.txt文件的示例:
1,2,0
3,4,5
6,7,8
Run Code Online (Sandbox Code Playgroud)
这是我的代码:
public String loadStartBoard(String filename) throws IOException {
BufferedReader reader = new BufferedReader(new FileReader(filename));
try {
StringBuilder sb = new StringBuilder();
String line = reader.readLine();
while (line != null) {
sb.append(line);
sb.append("\n");
sb.deleteCharAt(1);
//sb.deleteCharAt(2);
//sb.deleteCharAt(5);
//sb.deleteCharAt(6);
//sb.deleteCharAt(9);
//sb.deleteCharAt(10);
line = reader.readLine();
}
startState = sb.toString();
return startState;
} finally {
reader.close();
}
}
Run Code Online (Sandbox Code Playgroud)
这给出了输出:
103,4,5
6,7,8
Run Code Online (Sandbox Code Playgroud)
所以sb.deleteCharAt(1)将",2"删除为一个字符,我不知道为什么.任何帮助是极大的赞赏.
任何人都可以解释,为什么这段代码返回abc,True?
var str1 = "abc";
var str2 = "";
var builder = new StringBuilder();
builder.Append("a");
builder.Append("b");
builder.Append("c");
str2 = builder.ToString();
Console.WriteLine(string.IsInterned(str2));
Console.WriteLine(str1.Equals(str2));
Run Code Online (Sandbox Code Playgroud)
我用反射器看StringBuilder.ToString()方法但是找不到任何使用string.Intern的方法.
我使用的是Net Framework 4.5
我想知道为什么List<String>每个循环比每个循环的分割要慢StringBuilder
这是我的代码:
package nl.testing.startingpoint;
import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.util.ArrayList;
import java.util.List;
public class Main {
public static void main(String args[]) {
NumberFormat formatter = new DecimalFormat("#0.00000");
List<String> a = new ArrayList<String>();
StringBuffer b = new StringBuffer();
for (int i = 0;i <= 10000; i++)
{
a.add("String:" + i);
b.append("String:" + i + " ");
}
long startTime = System.currentTimeMillis();
for (String aInA : a)
{
System.out.println(aInA);
}
long endTime = System.currentTimeMillis();
long startTimeB = System.currentTimeMillis();
for …Run Code Online (Sandbox Code Playgroud) 我希望下面的代码(来自.Net框架中的Exception类)使用StringBuilder来构建一个字符串,然后返回一个builder.ToString()而不是在现有字符串上使用"+"运算符,最终创建每次都有一个新的字符串.
我希望大家写.Net源代码可以尽可能地遵循最佳实践,因此我想仔细检查这是否仍然是某种最佳方式
private String ToString(bool needFileLineInfo, bool needMessage) {
String message = (needMessage ? Message : null);
String s;
if (message == null || message.Length <= 0) {
s = GetClassName();
}
else {
s = GetClassName() + ": " + message;
}
if (_innerException!=null) {
s = s + " ---> " + _innerException.ToString(needFileLineInfo, needMessage)
+ Environment.NewLine
+ " "
+ Environment.GetResourceString("Exception_EndOfInnerExceptionStack");
}
string stackTrace = GetStackTrace(needFileLineInfo);
if (stackTrace != null)
{
s += Environment.NewLine + stackTrace;
}
return …Run Code Online (Sandbox Code Playgroud) stringbuilder ×10
java ×7
c# ×3
string ×3
performance ×2
digits ×1
jdbc ×1
list ×1
loops ×1
stringbuffer ×1
substring ×1
tostring ×1
xml ×1