标签: stringbuilder

隐式与显式StringBuilder.ToString()cethod调用

我刚刚编写了一个小单元测试,其中我使用了StringBuilder.

var stringBuilder = new StringBuilder();
stringBuilder.Append("Foo");

Assert.AreEqual(stringBuilder, "Foo");
Run Code Online (Sandbox Code Playgroud)

此测试将失败.

Expected: <Foo>
But was:  "Foo"
Run Code Online (Sandbox Code Playgroud)

但是,如果我将Assert更改为

Assert.AreEqual(stringBuilder.ToString(), "Foo");
Run Code Online (Sandbox Code Playgroud)

测试将通过.

那么隐式调用和ToString()方法的显式调用之间有什么区别?或者/这些括号(<>)代表什么?

c# stringbuilder unit-testing tostring implicit-conversion

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

只有一个例外,Catch退出

在我下面显示的try/catch中,应用程序循环遍历用户输入文本框的单词.(我已经证实这个部分有效.)当它循环通过单词时,它将每个单词传递给下面的函数.

private string runQuery(string data)
    {
        // Step 1 - Declare the query and parameters
        SqlCeConnection connection = new SqlCeConnection(@"Data Source=keywordDB.sdf");
        SqlCeCommand cmd = new SqlCeCommand("SELECT abbrev, description FROM abbreviations WHERE abbrev LIKE @abbrev", connection);
        cmd.Parameters.AddWithValue("@abbrev", data);
        SqlCeDataReader reader;

        try
        {
            // Step 2 - Opens the connection
            connection.Open();

            // Step 3- Execute query and assign the data to abbrevQueryResult and results
            reader = cmd.ExecuteReader();
            reader.Read();
            abbrevQueryResult = reader[0].ToString();
            results = reader[1].ToString();

            // Step 4 compare abbrevQueryResult to data entered …
Run Code Online (Sandbox Code Playgroud)

c# stringbuilder append try-catch

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

在String问题中插入多个单词

我想在String中插入多个单词,但offset相对于原始String:

StringBuffer sb = new StringBuffer("abcdefghijk");
sb.insert(3,"123");
sb.insert(5,"456");
System.out.println(sb); 
Run Code Online (Sandbox Code Playgroud)

结果:

abc124563defghijk
Run Code Online (Sandbox Code Playgroud)

我希望结果是:

abc123de456fghijk
Run Code Online (Sandbox Code Playgroud)

我能怎么做?谢谢你的任何建议.

java string stringbuilder stringbuffer

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

StringBuilder - 使用连接和使用追加循环

想知道什么是最好的使用方式:

StringBuilder query = new StringBuilder(" Select * from mytable t where ");
for ( Object object : objects ) {
     query.append(" t.field = " + object.field ); // this one OR
     query.append( object.field );                // this one? 
}
Run Code Online (Sandbox Code Playgroud)

不确定推荐使用哪一个.

java string performance stringbuilder

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

StringBuilder和CharSequence的ClassCastException

为什么以下代码将产生一个很好的ClassCastException:

public static void main(String []args){
        StringBuilder s1 = new StringBuilder("quaqua");
        StringBuilder s12= (StringBuilder)s1.subSequence(0,3);
        System.out.println(s12);
     }
Run Code Online (Sandbox Code Playgroud)

而以下代码(用String替换StringBuilder):

public static void main(String []args){
        String s1 = new String("quaqua");
        String s12= (String)s1.subSequence(0,3);
        System.out.println(s12);
     }
Run Code Online (Sandbox Code Playgroud)

工作良好?;

我知道有方法substring(int begin, int end);然而我只是好奇为什么使用StringBuilder(实现CharSequence)的强制转换不起作用而使用String工作.

提前致谢.

java string stringbuilder charsequence

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

sb = new StringBuilder(1024*1024*1024)>'System.OutOfMemoryException'被抛出

我需要在循环中附加大量字符串,这将创建一个非常长的字符串.
1GB应该足够长以存储字符串,因此我这样做:

var sb = new StringBuilder(1024 * 1024 * 1024);
Run Code Online (Sandbox Code Playgroud)

但收到此错误

'System.OutOfMemoryException' was thrown
Run Code Online (Sandbox Code Playgroud)

任何追加长串的建议?

我正在为MySQL数据库编写备份工具.这些工具将从数据库导出数据并写入文本文件.数据包含BLOB和TEXT数据类型.所以,期待很长的字符串.

这是代码:代码更新1

var conn = new MySqlConnection(Program.ConnectionString);
var cmd = new MySqlCommand();
cmd.Connection = conn;
conn.Open();

cmd.CommandText = selectSQL;

MySqlDataReader rdr = cmd.ExecuteReader();

while (rdr.Read())
{
    var sb = new StringBuilder(1024 * 1024 * 1024);
    for (int i = 0; i < rdr.FieldCount; i++)
    {
        if (sb.Length > 0)
            sb.AppendFormat(separator);

        if (rdr[i].GetType() == typeof(byte[]))
        {
            sb.AppendFormat(ConvertByteArrayToHexString((byte[])rdr[i]));
        }
        else
            sb.AppendFormat(rdr[i] + "");
    }
    WriteToFile(sb.ToString()); …
Run Code Online (Sandbox Code Playgroud)

c# mysql stringbuilder out-of-memory

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

如何预先添加到StringBuilder?

VB.NET有一个方法,就像java一样,附加到StringBuilder类型的对象 但是我可以在这个对象之前添加(我的意思是在stringbuilder值之前添加一些字符串,而不是之后).这是我的代码:

'Declare an array
    Dim IntegerList() = {24, 12, 34, 42}
    Dim ArrayBefore As New StringBuilder()
    Dim ArrayAfterRedim As New StringBuilder()
    ArrayBefore.Append("{")
    For i As Integer = IntegerList.GetLowerBound(0) To IntegerList.GetUpperBound(0)
        ArrayBefore.Append(IntegerList(i) & ", ")
    Next
    ' Close the string
    ArrayBefore.Append("}")
    'Redimension the array (increasing the size by one to five elements)
    'ReDim IntegerList(4)

    'Redimension the array and preserve its contents
    ReDim Preserve IntegerList(4)

    ' print the new redimesioned array
    ArrayAfterRedim.Append("{")
    For i As Integer = IntegerList.GetLowerBound(0) To …
Run Code Online (Sandbox Code Playgroud)

vb.net string stringbuilder prepend

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

Java ByteBuffer清除数据

我知道Java的ByteBuffer.clear()并不是真的要清除ByteBuffer中的所有数据,所以当我每次都使用StringBuilder.append()字符串时,最终结果总是在ByteBuffer中附加所有剩余的字符,这是旧的数据.写,所以如何解决这个问题?

int byteRead = -1;
int readCount = 0;
int BUFFER_SIZE = 256;
StringBuilder sb = new StringBuilder();
ByteBuffer buffer = ByteBuffer.allocate(BUFFER_SIZE);
ReadableByteChannel readableByteChannel = Channels.newChannel(is);
while ((byteRead = readableByteChannel.read(buffer)) > 0 && readCount < 68) {
    sb.append(new String(buffer.array(), "UTF-8"));
    buffer.clear();
    readCount++;
}
Run Code Online (Sandbox Code Playgroud)

java stringbuilder nio bytebuffer

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

通过Java 8 Streams API进行StringBuilder操作

我正在努力从StringBuilder中删除一些字符.该方法工作正常.但是,我希望通过Java-8流API实现相同的功能.目前的代码很冗长.有没有办法通过Java 8流API重构第二个方法removeCarryReturnsCharacters()?

private static StringBuilder readEntireFileUsingStream(Path filePath) throws IOException {

    StringBuilder data = new StringBuilder(String.valueOf(Files.readAllLines(filePath, StandardCharsets.ISO_8859_1)));

    return removeCarryReturnsCharacters(data);

}

private static StringBuilder removeCarryReturnsCharacters(StringBuilder fileData){

    int endIndex = 1012;
    String needToRemove = "";
    long totDataChunkCount = fileData.length()/1014;
    long delCounter = 1;
    try{
        while (delCounter < totDataChunkCount) {
            needToRemove = fileData.substring(endIndex, endIndex + 2);
            if (needToRemove.equals("^^")) {
                fileData.delete(endIndex, endIndex + 2);
            }
            endIndex += 1012;
            delCounter++;
        }
    }catch(StringIndexOutOfBoundsException exp){
        throw exp;
    }
    return fileData;
}
Run Code Online (Sandbox Code Playgroud)

stringbuilder java-8 java-stream

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

StringBuilder.append()中的OutOfMemoryError甚至有足够的内存

即使将内存大小设置为32 GB并仅将500 MB文件读入构建器,我也会从java.lang.StringBuilder.append中收到OutOfMemoryError。

java.lang.OutOfMemoryError: null
    at java.base/java.lang.AbstractStringBuilder.hugeCapacity(AbstractStringBuilder.java:214) ~[na:na]
    at java.base/java.lang.AbstractStringBuilder.newCapacity(AbstractStringBuilder.java:206) ~[na:na]
    at java.base/java.lang.AbstractStringBuilder.ensureCapacityInternal(AbstractStringBuilder.java:173) ~[na:na]
    at java.base/java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:538) ~[na:na]
    at java.base/java.lang.StringBuilder.append(StringBuilder.java:174) ~[na:na]
    at com.github.loa.indexer.service.index.base64.Base64Encoder.encode(Base64Encoder.java:31) ~[classes/:na]
Run Code Online (Sandbox Code Playgroud)

java stringbuilder out-of-memory

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