StringBuilder,在值之间添加制表符

6

我有一个小问题:

我有一个包含3个值的字段列表。我想用这三个值来构建我的字符串,并用"TAB"分隔。

代码:

StringBuilder stringBuilder = new StringBuilder();
foreach (string field in fields)
{
    stringBuilder.Append(field).Append("\t");
}
stringBuilder.AppendLine();
return stringBuilder.ToString();

这个Tab键只是在第3个和第2个值之间(在第1个和第2个之间有一个空格?!)。

因此,我尝试了这个:

StringBuilder stringBuilder = new StringBuilder();
foreach (string field in fields)
{
    stringBuilder.Append(field + "\t").Append("\t");
}
stringBuilder.AppendLine();
return stringBuilder.ToString();

然后我在第三个和第二个之间有两个制表符,在第一个和第二个之间有一个制表符,还有一个空格在第一个和第二个之间。(这个空格总是存在的,如何避免它?)所以我该怎么做呢?只需要在这些值之间添加制表符(不要加空格)。

2
你如何验证选项卡不存在?通过查看文本在屏幕上的位置来确定吗? - GSerg
至少我将字符串(返回)复制到剪贴板中,然后通过代码将其粘贴到记事本中。 - eMi
1
你知道吗,记事本会在固定点设置制表位,如果你的制表符恰好在靠近这些点的位置,它看起来就像一个很窄的空格。 - GSerg
可能需要使用Notepad++ / Vim或带有二进制编辑器的其他工具来查看您实际拥有的内容。 - ColWhi
应该先下载它,呵呵。 - eMi
显示剩余2条评论
5个回答

16
尝试
StringBuilder stringBuilder = new StringBuilder();
foreach (string field in fields)
{
    stringBuilder.Append(field.Trim()).Append("\t");
}
stringBuilder.AppendLine();
return stringBuilder.ToString();

基本上我只会使用return string.Join ( "\t", fields );

刚刚解决了这个问题,请看问题评论,但是使用 Trim 的想法很好,我会将其标记为答案 :) - eMi
这个平台是否独立?例如,Environment.Newline是跨平台的,而"\n"不是。 - Steam
据我所知,“Tab”只有一个字符-因此在我看来,这是与平台无关的... - Yahia

2

我认为你混淆了制表符和空格。

你是否期望在每个单词的末尾添加固定数量的空格?

\t -> 只是一个制表符。

以下内容是由您提供的代码生成的。

Java    StackOverflow   Banyan
Javasun StackOverflow   Banyan

以上两行在第一个单词和第二个单词之间都有相同的制表符。

如果您在“Javasun”的结尾再输入一个字符,它会像下面这样扩展:

Javaasunk   StackOverflow   Banyan

1

我本以为你会想要

StringBuilder stringBuilder = new StringBuilder();
foreach (string field in fields)
{
    stringBuilder.Append(field);
    stringBuilder.Append("\t");
}
stringBuilder.AppendLine();
return stringBuilder.ToString();

虽然在 MSDN 上看,Append 方法返回的是字符串生成器的引用,因此不应该有什么差异。 - ColWhi
它是一样的,但只是解决了问题,请查看问题评论。 - eMi
是的,我也在上面添加了一条注释。 - ColWhi

1

你可以使用string.Join来代替循环:

StringBuilder stringBuilder = new StringBuilder();

stringBuilder.AppendLine(string.Join("\t", fields));

请注意,您也可以直接将字符串传递给AppendLine

0
Sub WarningWindow(ByVal content As String)
    Dim sw As New StringWriter()
    Dim hw As New HtmlTextWriter(sw)
    Dim gridHTML As String = sw.ToString().Replace("""", "'").Replace(System.Environment.NewLine, "")
    Dim sb As New StringBuilder()
    Dim a As String = "Welcomeback"
    'GridView1.RenderControl(hw)
    sb.Append("<script type = 'text/javascript'>")
    sb.Append("window.onload = new function(){")
    sb.Append("var printWin = window.open('', '', 'left=0")
    sb.Append(",top=0,width=1400,height=500,resize=yes,scrollbars =yes');")
    sb.Append("printWin.document.write(""")
    sb.Append("<INPUT Type=Button Name=Close Size=40  Value='Clsose(GSS)' onclick='self.close()'; / > ")
    sb.Append("</br><INPUT Type=Button Name=fu Size=40  Value='Alert' onclick=javascript:window.alert('" & a & "'); / > ")
    sb.Append("<INPUT Type=Text Name=gss Size=40  Value=300 ; / > ")
    sb.Append(" <P>")
    sb.Append(content)
    sb.Append(""");")
    sb.Append("printWin.focus();")
    sb.Append("printWin.show;};")
    sb.Append("</script>")
    ClientScript.RegisterStartupScript(Me.GetType(), "suvesh", sb.ToString())
End Sub

调用它像 WarningWindow("写任何东西")。 - Gurbachan Singh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接