标签: stringbuilder

清除StringBuilder对象的当前字符串

可能重复:
清除.NET的StringBuilder内容的最佳方法

是否有一种快速简便的方法来摆脱StringBuilder目前的含义?

我正在寻找一个Clear()方法,但我找不到它.;)

我愿意

stringBuilderObject = ""
Run Code Online (Sandbox Code Playgroud)

或类似的规定.

c# stringbuilder

2
推荐指数
2
解决办法
3960
查看次数

StringBuilder和ResultSet性能问题的可能原因是什么

我在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)

java xml performance stringbuilder jdbc

2
推荐指数
2
解决办法
1623
查看次数

将Java中的数字填充到一定数量的数字的最快方法

我试图根据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)

java performance stringbuilder substring digits

2
推荐指数
1
解决办法
3317
查看次数

如何将值附加到StringBuilder数组

我正在解析十进制格式的网格坐标.我想将模式匹配存储在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)

java stringbuilder

2
推荐指数
1
解决办法
8972
查看次数

在这种情况下编译器实际发生了什么

鉴于以下代码段,我有一个小问题:

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()仅在某些情况下自动调用对象?(情况:根本没有操作或以前的字符串继承)

java compiler-construction stringbuilder

2
推荐指数
1
解决办法
51
查看次数

deleteCharAt()从Java中的字符串中删除多个字符

我试图从字符串中删除一些不需要的字符.我正在使用.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"删除为一个字符,我不知道为什么.任何帮助是极大的赞赏.

java stringbuilder

2
推荐指数
1
解决办法
2120
查看次数

StringBuilder和string.IsIntern方法

任何人都可以解释,为什么这段代码返回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

c# string stringbuilder

2
推荐指数
1
解决办法
146
查看次数

为什么迭代通过List <String>比拆分字符串慢并迭代StringBuilder?

我想知道为什么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)

java string stringbuilder loops list

2
推荐指数
1
解决办法
152
查看次数

为什么.Net中的Exception类的ToString()方法不使用StringBuilder来构建字符串?

我希望下面的代码(来自.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)

c# string stringbuilder tostring

2
推荐指数
1
解决办法
105
查看次数

StringBuilder中length()和capacity()方法的区别

我试图弄清楚何时使用或为什么capacity()方法与length()方法StringBuilderStringBuffer类不同.

我搜索了Stack Overflow并设法得出这个答案,但我不明白它与length()方法的区别.我也访问了这个网站,但这对我帮助更少.

java stringbuilder stringbuffer

2
推荐指数
1
解决办法
1609
查看次数