标签: stringbuilder

是否需要在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万
查看次数

.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
查看次数

如何在Java中将字节数组转换为十六进制格式

我知道您可以使用printf并使用StringBuilder.append(String.format("%x", byte))将值转换为HEX值并在控制台上显示它们.但我希望能够实际格式化字节数组,以便每个字节显示为HEX而不是十进制.

这是我的代码的一部分,我已经说过我说的前两种方式:

if(bytes > 0)
    {
        byteArray = new byte[bytes]; // Set up array to receive these values.

        for(int i=0; i<bytes; i++)
        {
            byteString = hexSubString(hexString, offSet, CHARSPERBYTE, false); // Isolate digits for a single byte.
            Log.d("HEXSTRING", byteString);

            if(byteString.length() > 0)
            {
                byteArray[i] = (byte)Integer.parseInt(byteString, 16); // Parse value into binary data array.
            }
            else
            {
                System.out.println("String is empty!");
            }

            offSet += CHARSPERBYTE; // Set up for next word hex.    
        }

        StringBuilder sb = new …
Run Code Online (Sandbox Code Playgroud)

java format stringbuilder hex bytearray

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

StringBuilder线程安全(与parallelStream一起使用)?

我的代码:

StringBuilder sb = new StringBuilder();

events.parallelStream().forEach(event -> {
    sb.append(event.toString());
    sb.append("\n");
});
Run Code Online (Sandbox Code Playgroud)

我不关心events.toString()最终结果的顺序.但我关心的是,这events.toString()条线会正确地出现在一条线上,当然没有混合/混乱.

parallelStream(代替stream)在这方面的安全吗?

java stringbuilder multithreading thread-safety java-8

12
推荐指数
3
解决办法
1149
查看次数

传值(StringBuilder vs String)

我不明白为什么System.out.println(name)输出Sam而不受方法的concat函数的影响,而System.out.println(names)输出Sam4作为方法的append方法的结果.为什么StringBuilder受影响而不是String?通常,在对对象的引用上调用方法会影响调用者,所以我不明白为什么String结果保持不变.提前致谢

public static String speak(String name) {
    name = name.concat("4");
    return name;
}

public static StringBuilder test(StringBuilder names) {
    names = names.append("4");
    return names; 
}

public static void main(String[] args) {
    String name = "Sam";
    speak(name);
    System.out.println(name); //Sam
    StringBuilder names = new StringBuilder("Sam");
    test(names);
    System.out.println(names); //Sam4
}
Run Code Online (Sandbox Code Playgroud)

java string stringbuilder parameter-passing pass-by-value

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

StringBuilder.setLength(0)怎么可能调用Arrays.fill?

在调查性能测试结果时,我发现Java Flight Recorder的"热方法"中报告了以下堆栈跟踪:

Stack Trace                                        Sample Count Percentage(%)
-----------                                        ------------ ----------
java.util.Arrays.rangeCheck(int, int, int)                  358      2.212
   java.util.Arrays.fill(char[], int, int, char)            358      2.212
      java.lang.AbstractStringBuilder.setLength(int)        358      2.212
         java.lang.StringBuilder.setLength(int)             358      2.212
            org.apache.logging.log4j.core.async.RingBufferLogEvent.getMessageTextForWriting()
                                                            201      1.242
               org.apache.logging.log4j.core.async.RingBufferLogEvent.setMessage(Message)
                                                            201      1.242
Run Code Online (Sandbox Code Playgroud)

从堆栈跟踪中,看起来设置StringBuilder的长度导致Arrays.fill被调用.但是,我不明白为什么会发生这种情况,因为StringBuilder的长度设置为零.

查看Log4j RingBufferLogEvent.getMessageTextForWriting方法的代码,很明显StringBuilder的长度永远不会设置为零以外的任何其他值:

// RingBufferLogEvent.java

private StringBuilder getMessageTextForWriting() {
    if (messageText == null) {
        messageText = new StringBuilder(Constants.INITIAL_REUSABLE_MESSAGE_SIZE); // 128
    }
    messageText.setLength(0); // <-- this call. Note: new length is ALWAYS zero.
    return messageText;
}
Run Code Online (Sandbox Code Playgroud)

我不明白这是如何导致Arrays.fill被调用的.看一下代码AbstractStringBuilder,Arrays.fill …

java arrays stringbuilder jvm

12
推荐指数
1
解决办法
612
查看次数

在 Kotlin 中将字符插入字符串中的特定位置 x

Kotlin 中的字符串是不可变的,不能像

ans[index] = value
Run Code Online (Sandbox Code Playgroud)

我想知道它们是使其发挥作用的简单方法

string stringbuilder kotlin

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

Scala StringBuilder

是否有一个隐式方法将scala.collection.mutable.StringBuilder转换为java.lang.StringBuilder?

我正在使用一个Java库(JCommander),其中一个方法(usage)接受一个java.jang.StringBuilder参数.

stringbuilder scala implicit-conversion

11
推荐指数
1
解决办法
6159
查看次数

使用GetPrivateProfileString读取所有ini文件值

我需要一种方法来读取StringBuilder变量中的ini文件的所有部分/键:

[DllImport("kernel32.dll")]
private static extern int GetPrivateProfileString(string lpAppName, string lpKeyName, string lpDefault, StringBuilder lpReturnedString, int nSize, string lpFileName);

...

private List<string> GetKeys(string iniFile, string category)
{
    StringBuilder returnString = new StringBuilder(255);            

    GetPrivateProfileString(category, null, null, returnString, 32768, iniFile);

    ...
}
Run Code Online (Sandbox Code Playgroud)

在returnString中只是第一个键值!如何一次性获取所有内容并将其写入StringBuilder和List?

谢谢您的帮助!

招呼leon22

c# ini stringbuilder

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

将字符串拆分为具有最大长度的行的最佳方法,而不会破坏单词

我希望将一个字符串分成指定最大长度的行,如果可能的话,不分割任何单词(如果有一个单词超过最大行长,则必须将其拆分).

与往常一样,我敏锐地意识到字符串是不可变的,并且最好使用StringBuilder类.我已经看过将字符串拆分为单词的示例,然后使用StringBuilder类构建行,但下面的代码对我来说似乎"更整洁".

我在描述中提到"最好"而不是"最有效",因为我也对代码的"口才"感兴趣.字符串永远不会很大,通常会分成2行或3行,并且不会发生数千行.

以下代码真的很糟糕吗?

private static IEnumerable<string> SplitToLines(string stringToSplit, int maximumLineLength)
{
    stringToSplit = stringToSplit.Trim();
    var lines = new List<string>();

    while (stringToSplit.Length > 0)
    {
        if (stringToSplit.Length <= maximumLineLength)
        {
            lines.Add(stringToSplit);
            break;
        }

        var indexOfLastSpaceInLine = stringToSplit.Substring(0, maximumLineLength).LastIndexOf(' ');
        lines.Add(stringToSplit.Substring(0, indexOfLastSpaceInLine >= 0 ? indexOfLastSpaceInLine : maximumLineLength).Trim());
        stringToSplit = stringToSplit.Substring(indexOfLastSpaceInLine >= 0 ? indexOfLastSpaceInLine + 1 : maximumLineLength);
    }

    return lines.ToArray();
}
Run Code Online (Sandbox Code Playgroud)

c# string stringbuilder split

11
推荐指数
3
解决办法
8082
查看次数