0

可能重复:
在 VB 字符串中转义双引号

我在下面用字符串值分配变量,我想用引号打印这些变量,尽管我不确定如何完成这个。到目前为止,一切都打印得很好,除了没有引号。我所拥有的如下:

    Dim tU As String = "Print_Me"
    Dim tU2 As String = ""
    Dim str1 As Integer = 1
    Dim str2 As String = tU
    Dim str3 As Single = 3.5
    Dim str4 As String = tU2

    Dim fw As New System.IO.StreamWriter("testfile.txt")
    fw.WriteLine(str1 & "," & str2 & "," & str3 & "," & str4 & "," & 0)

    fw.Close()
    fw.Dispose()
    'prints>>>1,Print_Me,3.5,,0<<<
    'I like to print>>>1,"Print_Me",3.5,"",0<<<

编辑

    Dim tU As String = "Print_Me"
    Dim tU2 As String = ""
    Dim str1 As Integer = 1
    Dim str2 As String = tU
    Dim str3 As Single = 3.5
    Dim str4 As String = tU2
    Dim str5 As Integer = 0

    Using fw As New System.IO.StreamWriter("testfile.txt")
        fw.WriteLine(String.Format("""{0}"",""{1}"",""{2}"",""{3}"",""0""", str1, str2, str3, str4, str5))
    End Using

    ''Currently prints>>> "1","Print_Me","3.5","","0"

    ''I would like to print>>> 1,"Print_Me",3.5,"",0

我通过 str5 间接填充 str1,但我不想打印所有带有引号的项目,那么我该如何调整解决方案来实现这一点?

4

2 回答 2

2

尝试通过键入"两次来转义双引号。此外,我发现 String.Format 比串联更整洁,如果将 StreamWriter 包装在 using 块中,则无需处理它,因为这是由垃圾收集器完成的。

Dim str1 As Integer = 1
Dim str2 As String = "Print_Me"
Dim str3 As Single = 3.5
Dim str4 As String = ""

Using fw As New System.IO.StreamWriter("testfile.txt")
    fw.WriteLine(String.Format("""{0}"",""{1}"",""{2}"",""{3}"",""0""", str1, str2, str3, str4))
End Using

此外,您可能可以为变量提供更清晰的名称。在类型之后命名它们被认为是不好的做法,因为它并没有真正为我们提供有关变量包含哪些信息的任何信息。为 Integer 或 Single 加上前缀str更糟糕,因为阅读您的代码的人可能会错误地认为该变量是一个字符串,因此尝试像这样对待它。

编辑:响应您的评论,首先,在 VB.Net 字符串中,""表示双引号的单个实例,如果要删除双引号,只需删除""并保持其他所有内容不变。其次,如果您的某些字符串是间接填充的,这并不重要,您无需创建新变量即可在新字符串中使用它们。在您的代码中tustr2指向同一条数据,就像tu2and一样str4,不需要创建新变量。如果您在变量中保存了一段数据,则无需创建新变量即可以不同的方式使用它。

于 2012-09-30T17:31:38.617 回答
0

当您的输出如此规则(并且可能包含更多字符串)时,您可能要考虑的替代方法是:

Dim str1 As Integer = 1
Dim str2 As String = "Print_Me"
Dim str3 As Single = 3.5
Dim str4 As String = ""

Dim strings() As String = _
{ _
    str1, _
    str2, _
    str3, _
    str4, _
    "0" _
}

Using fw As New System.IO.StreamWriter("testfile.txt")
    fw.WriteLine( _
        String.Join( _
            ",", _
            strings.Select(Function (s) """" & s & """")))
End Using

您仍然使用""来指示内联引用,但您只需要执行两次。如果您的字符串列表变大,您只需将它们添加到数组中(或者它可以是列表或任何其他可枚举)。

于 2012-09-30T23:41:15.080 回答