【问题标题】:VB.NET String.Length is longer than string [duplicate]VB.NET String.Length 比字符串长[重复]
【发布时间】:2015-11-10 15:53:25
【问题描述】:

为什么下面的代码打印'foo' Length: 10000

如何丢弃未使用的数组元素,使字符串为“长度:3”?

Dim arr(9999) as char

Dim sw As StreamWriter = New StreamWriter("example.txt")
sw.WriteLine("foo")
sw.Close()

Dim sr As StreamReader = New StreamReader("example.txt")
sr.ReadBlock(arr, 0, 10000)
sr.Close()

Dim con as string = New String(arr)
Console.WriteLine(String.Format("'{0}' Length: {1}", con, con.Length.ToString()))

【问题讨论】:

  • 用于创建字符串的数组 (arr) 长度为 10 个字符。您只填写了 3 个字符(其余为空)这一事实是另一回事

标签: arrays vb.net


【解决方案1】:

你可以使用Substring:

Dim newString As String = con.Substring(0, 3)

【讨论】:

  • 如果我不知道数组的内容有多长,我应该为第二个参数传递什么?
  • @Dan:你不知道是什么意思?您为 3 个字符指定了常量值。在这种情况下,您的答案是 3。那么请再举一个例子。
  • 这是一个文件缓冲区:oFile.ReadBlock(arrFileBuffer, 0, 16000)。如果文件仅包含 12 个字符,我如何获得长度为 12 的字符串,而不是长度为 16000 的字符串?我不能使用oFile.ReadToEnd(),因为有时文件是 40000 个字符,在这种情况下我只想读取前 16000 个字符。
  • @Dan: From MSDN: 返回值。 The number of characters that have been read. The number will be less than or equal to count, depending on whether all input characters have been read. 只需保存 ReadBlock 调用的结果并使用它传递给 Substring 的第二个参数。
  • 我忽略了这一点。太棒了,谢谢!
【解决方案2】:

不知道为什么会这样,但是....

    Dim lChar As New List(Of Char)
    lChar.Add("f")
    lChar.Add("o")
    lChar.Add("o")
    Dim con2 As String = lChar.ToArray ' ?????
    Debug.Print("'" & con2 & "' Length: " & con2.Length)

我猜 String 本质上是一个数组。

【讨论】:

  • 你从一个长度为 3 的列表开始,而我有一个长度为 10 的 char 数组。不知道这个答案与问题有什么关系。
  • 示例代码使用一个随着每个 .Add 动态增长的 List。答案并不直接相关,但显示了一种替代方法来避免预先确定维度的数组。
  • 在我的问题的上下文中,需要一个固定维度的数组,因此问题专门使用该类型。我知道有许多其他方法可以表示字符集合,但它们都与这个特定问题无关,除非您可以有效地将数组转换为正在使用的类型(我试图避免不必要的内存副本,因为实际上数组是一个大文件,不是 3 个字符的字符串)。
  • 我现在明白了 - 我建议您在原始帖子中包含评论中提供的详细程度:“它是一个文件缓冲区”。顺便说一句,您可以返回并编辑 OP 以添加更多信息。
  • 我在您发表评论前几个小时就这样做了。最初,我试图将这个问题概括得有点过分。感谢您的回答和提示!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-07
  • 2013-02-12
  • 2015-10-21
  • 2012-05-22
  • 1970-01-01
  • 2012-10-23
相关资源
最近更新 更多