标签: stringbuilder

为什么Java StringBuilder具有CharSequence的构造函数和String的构造函数?

知道String实现了CharSequence接口,那么为什么StringBuilder有一个CharSequence的构造函数和另一个String的构造函数?javadoc中没有指示!

public final class String
    implements java.io.Serializable, Comparable<String>, CharSequence {...}
Run Code Online (Sandbox Code Playgroud)
public final class StringBuilder
    extends AbstractStringBuilder
    implements java.io.Serializable, CharSequence
{

...

    /**
     * Constructs a string builder initialized to the contents of the
     * specified string. The initial capacity of the string builder is
     * {@code 16} plus the length of the string argument.
     *
     * @param   str   the initial contents of the buffer.
     */
    public StringBuilder(String str) {
        super(str.length() + 16);
        append(str);
    }

    /**
     * Constructs a string builder …
Run Code Online (Sandbox Code Playgroud)

java stringbuilder

15
推荐指数
1
解决办法
1201
查看次数

Java StringBuilder和线程安全

我正在从多个部分构建一个字符串,并希望使用其中任何一个StringBufferStringBuilder这样做.从Java 5文档中,我发现StringBuilder在可能的情况下这是首选,但需要注意

StringBuilder多个线程使用的实例不安全.

从这个声明中,我理解我不应该有StringBuilder多个线程共享的单个实例.但是这个案子呢:

//Is this safe?
//foo() is called simultaneously by multiple threads
String foo(String a, String b) {
    return new StringBuilder(a).append(b).toString();
}
Run Code Online (Sandbox Code Playgroud)

这里函数中可能同时存在多个线程,同时使用StringBuilder类(例如,静态变量的并发访问,如果有的话),但每个线程都有自己独立的实例StringBuilder.从文档中,我无法确定这是否算作多线程的使用.

java stringbuilder multithreading thread-safety

14
推荐指数
3
解决办法
2万
查看次数

如何重新分配StringBuffer的值?

我们如何重新赋值StringBuffer或StringBuilder变量的值?

StringBuffer sb=new StringBuffer("teststr");
Run Code Online (Sandbox Code Playgroud)

现在我必须将sb的值更改为"testString"而不清空内容.我正在寻找一种方法,可以直接执行此分配,而无需使用单独的内存分配.我认为我们只能在清空内容后才能执行此操作.

java string stringbuilder stringbuffer

14
推荐指数
3
解决办法
3万
查看次数

如何修剪java stringbuilder?

我有一个需要修剪的StringBuilder对象(即所有空格字符/ u0020及以下从任一端删除).

我似乎无法在字符串生成器中找到可以执行此操作的方法.

这就是我现在正在做的事情:

String trimmedStr = strBuilder.toString().trim();
Run Code Online (Sandbox Code Playgroud)

这给出了所需的输出,但它需要分配两个字符串而不是一个.在字符串仍在StringBuilder中时,是否更有效地修剪字符串?

java string optimization stringbuilder android

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

Android StringBuilder vs String Concatenation

我正在阅读此文档页面,http://developer.android.com/reference/android/util/Log.html.

这部分引起了我的注意:

提示:当你拨打电话时不要忘记

Log.v(TAG, "index=" + i);

当您构建要传递给Log.d的字符串时,编译器使用StringBuilder并且至少发生三次分配:StringBuilder本身,缓冲区和String对象.实际上,还有另一个缓冲区分配和复制,对gc的压力更大.这意味着如果您的日志消息被过滤掉,那么您可能正在进行大量工作并产生大量开销.

这意味着Android编译器正在采用字符串连接(+)并将它们转换为StringBuilder和append语句.

我的假设是正确的还是更好地手动使用StringBuilder而不是字符串连接?

string stringbuilder android string-concatenation

14
推荐指数
1
解决办法
3308
查看次数

是否需要在StringBuilder中替换字符串之前进行检查(使用"Contains"或"IndexOf"等函数)?

C#中是否有任何方法IndexOf或Contains.以下是代码:

var sb = new StringBuilder(mystring);
sb.Replace("abc", "a");
string dateFormatString = sb.ToString();

if (sb.ToString().Contains("def"))
{
    sb.Replace("def", "aa");
}


if (sb.ToString().Contains("ghi"))
{
    sb.Replace("ghi", "assd");
}
Run Code Online (Sandbox Code Playgroud)

你可能已经注意到我一次又一次地使用ToString(),我想避免它,因为它每次都在创建新的字符串.你能帮帮我怎样才能避免它?

c# stringbuilder

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

使用StringBuilder使用空格或其他字符填充String

我是java的初学者,这是我在Stackoverflow上的第一篇文章.虽然我的初始代码与此处的其他帖子类似,但我的问题与实现StringBuilder有关,所以这篇帖子的原因.

我创建了一个方法

**Initial code**
private static String padAgain(String result,int padNum)  
    {  
          String str = "";  
          for(int i = padNum; i >= 0; i--)  
        {  
            str = String.format("%" + padNum + "s", result).replace(" ", "*");  
        }  
          return str;  
    }  
Run Code Online (Sandbox Code Playgroud)

使用String.format方法用空格(或特殊字符)填充字符串.我在我的程序中使用相同的方法来纠正数字.数字以2(单位数)开头,并以2的倍数(包含n个数字)增加,空格与数字的增加成反比.

以下是用于说明目的的输出:

    Enter exponent value for base-2 - Enter 0 to exit: 
128
Square    1: **************************************2 items
Square    2: **************************************4 items
Square    3: **************************************8 items
Square    4: *************************************16 items
Square    5: *************************************32 items
Square    6: *************************************64 items
Square    7: ************************************128 items
Square …
Run Code Online (Sandbox Code Playgroud)

java string stringbuilder padding

13
推荐指数
3
解决办法
3万
查看次数

StringBuilder中最快的搜索方法

我有一个StringBuilder命名stb_Swap_Tabu用来存储课程的名称,我使用下面的方法找到一个过程:

stb_Swap_Tabu.ToString.Contains("CourseName")
Run Code Online (Sandbox Code Playgroud)

就我而言,性能是最重要的问题.有没有更快的方法?

.net c# vb.net performance stringbuilder

13
推荐指数
1
解决办法
3万
查看次数

AbstractStringBuilder中的OutOfMemoryError enlargeBuffer

我在Stream中读取youtube响应并将其转换为String.使用以下代码:

网址:http://gdata.youtube.com/feeds/api/users/cnn/uploads?&v = 2&max-results = 25 &alt = json

private String convertStreamToString(InputStream is) {

        BufferedReader reader = new BufferedReader(new InputStreamReader(is));
        StringBuilder sb = new StringBuilder();

        String line = null;
        try {
            while ((line = reader.readLine()) != null) {
                sb.append(line + "\n");
            }        
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                is.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return sb.toString();
    } 
Run Code Online (Sandbox Code Playgroud)

此代码在除Android 4.0设备之外的所有设备中都能正常运行.我得到以下logcat:

java.lang.RuntimeException: An error occured while executing doInBackground()
        at android.os.AsyncTask$3.done(AsyncTask.java:278)
        at …
Run Code Online (Sandbox Code Playgroud)

stringbuilder android out-of-memory

13
推荐指数
1
解决办法
8535
查看次数

.NET StringBuilder - 检查是否以字符串结尾

检查是否StringBuilder以特定字符串结束的最佳(最短和最快)方法是什么?

如果我只想检查一个字符,这不是问题sb[sb.Length-1] == 'c',但如何检查它是否以更长的字符串结尾?

我可以考虑像循环"some string".Length和逐个读取字符之类的东西,但也许存在更简单的东西?:)

最后我想要像这样的扩展方法:

StringBuilder sb = new StringBuilder("Hello world");
bool hasString = sb.EndsWith("world");
Run Code Online (Sandbox Code Playgroud)

.net c# string stringbuilder

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