Stringbuilder 在将其转换为字符串后添加反斜杠

Stringbuilder adds backslash after converting it to string

我有一种情况想在字符串中添加引号。

static void Main(string[] args)
    {
        int valueCounter = 0;
        int valueCount = 0;
        var valueBuilder = new StringBuilder();
        List<string> values = new List<string>();
        values.Add("AAAA");
        values.Add("BBBB");
        values.Add("CCCC");
        valueCount = values.Count;

        foreach (var value in values)
        {
            valueCounter++;
            if ((valueCounter - 1) > 0)
                valueBuilder.Append("\"");
            valueBuilder.Append(values[valueCounter - 1].ToString());

            if (valueCounter != valueCount)
            {
                valueBuilder.Append(@",");
            }
        }

        string output = valueBuilder.ToString();

    }

如您所见,将 Stringbuilder 转换为字符串后,它会将反斜杠添加到字符串中。

请帮助我知道如何得到想要的结果:“AAAA”,“BBBB”,“CCCC”

只需删除 valueBuilder.Append("\"");

我的错误。它只是转义 \

在 Java 字符串对象中使用引号必须进行转义。您抱怨的 \ 仅在您的工具中可见,并且需要转义 " 以便不会发生错误。如果您要执行 System.out.println(output);,您将看不到 \ 字符。

我认为下面的 foreach 循环代码可以解决您的问题。

foreach (var value in values)
    {
        value = "\""+value+"\"";
        valueBuilder.Append(value);

        if (++valueCounter != valueCount)
        {
            valueBuilder.Append(@",");
        }
    }

这是您的代码的更正版本(修复了第一个片段的封闭):

string[] strArr = new string[] { 
    "AAAA", "BBBB","CCCC"
};
StringBuilder sb = new StringBuilder();
for(int i = 0; i < strArr.Length; i++) {
    sb.Append('"');
    sb.Append(strArr[i]);
    sb.Append('"');
    if(i < strArr.Length - 1)
        sb.Append(',');
}
var output = sb.ToString();

这是调试器显示结果的方式(quoted/escaped 视图):

这是人类可读格式的样子: "AAAA","BBBB","CCCC"

提示与技巧:
您可以使用 nq format-specifier 来显示字符串 unquoted/unescaped:

    output,nq