【问题标题】:String Array Thing!字符串数组的东西!
【发布时间】:2009-11-09 14:20:25
【问题描述】:

好的 - 首先,我正在进入不熟悉的领域 - 所以请善待!

我有一个看起来有点像这样的脚本:

Private Function checkString(ByVal strIn As String) As String
    Dim astrWords As String() = New String() {"bak", "log", "dfd"}
    Dim strOut As String = ""
    Dim strWord As String
    For Each strWord In astrWords
        If strIn.ToLower.IndexOf(strWord.ToLower, 0) >= 0 Then
            strOut = strWord.ToLower
            Exit For
        End If
    Next
    Return strOut
End Function

它的功能是检查输入的字符串,看看其中是否有任何'astrWords',然后返回值。

所以我写了一些代码来动态创建像这样的单词:

Dim extensionArray As String = ""
    Dim count As Integer = 0
    For Each item In lstExtentions.Items
        If count = 0 Then
            extensionArray = extensionArray & """." & item & """"
        Else
            extensionArray = extensionArray & ", ""." & item & """"
        End If
        count = count + 1
    Next
    My.Settings.extensionArray = extensionArray
    My.Settings.Save()

显然 - 它使用列表项创建相同的数组。该代码的输出与我硬编码时完全相同 - 但是当我将代码的第一位更改为: 将 asrWords 调暗为 String() = New String() {My.Settings.extensionArray} 代替: Dim asrWords As String() = New String() {"bak", "log", "dfd"} 它开始寻找整个语句,而不是遍历每个单独的语句?

我认为这与单词字符串末尾的括号有关 - 但我迷路了!

任何帮助表示赞赏:)

【问题讨论】:

    标签: vb.net arrays string


    【解决方案1】:

    当您使用文字数组中设置的字符串时,就好像您使用了包含分隔字符串的单个字符串:

    Dim astrWords As String() = New String() {"""bak"", ""log"", ""dfd"""}
    

    您可能想要做的是在设置中放置一个逗号分隔的字符串,例如"bak,log,dfd",然后您可以将其拆分为数组:

    Dim astrWords As String() = My.Settings.extensionArray.Split(","C)
    

    【讨论】:

    • 你真是个天才!太棒了!非常感谢 - 编码愉快:)
    【解决方案2】:

    您需要将 extensionArray 设置为 字符串数组,而不是简单的 字符串。 请注意,

    Dim something as String  
    

    ... 定义一个字符串,但是

    Dim somethingElse as String()  
    

    ... 定义了一个完整的字符串数组。

    我认为使用您的代码,您需要以下内容:

    Dim extensionArray As String() = new String(lstExtensions.Items)
    Dim count As Integer = 0
    For Each item In lstExtentions.Items
        extensionArray(count) = item
        count = count + 1
    Next
    My.Settings.extensionArray = extensionArray
    My.Settings.Save()
    

    然后在 checkString 的开头你需要类似的东西

    Private Function checkString(ByVal strIn As String) As String
        Dim astrWords As String() = My.Settings.extensionArray
        ...
    

    如果 Items 有一个 'ToArray()' 方法,还有一种更简单的方法可以将 lstExtentions.Items 转换为数组,但我不确定你在那里使用的是什么类型...

    【讨论】:

      【解决方案3】:

      您所做的是创建了一个包含所有 3 个单词的字符串。您需要创建一个字符串数组。

      New String() {"bak", "log", "dfd"}
      

      表示创建一个新的字符串数组,其中包含 3 个字符串值“bak”、“log”和“dfd”。

      New String() {My.Settings.extensionArray}
      

      表示创建一个新的字符串数组,其中仅包含一个值,即 extensionArray 的内容。 (您已将其设置为 ""bak"、"log"、"dfd"")。请注意,这是一个字符串,而不是字符串数组。你不能只创建一个带有逗号的字符串,你需要创建一个字符串数组。

      如果你想动态创建你的数组,你需要像这样定义它:

      Dim astrWords As String() = New String(3)
      

      这将创建一个包含 3 个空格的数组。

      然后您可以通过执行以下操作为每个空格分配一个字符串:

      astrWords(0) = "bak"
      astrWords(1) = "log"
      astrWords(2) = "dfd"
      

      您可以在 for 循环中执行该操作:

      Dim count As Integer = 0
      For Each item In lstExtentions.Items
          astrWords(count) = item
          count = count + 1
      Next
      

      或者,您可以考虑使用generic collection。这样你就可以使用 Add() 方法向它添加多个字符串

      【讨论】:

        【解决方案4】:

        我认为您希望您的 extensionArray 是 String() 类型而不是 String。当您尝试初始化新数组时,初始化程序不知道解析出多个值。它只看到你的单个字符串。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-06-22
          • 1970-01-01
          • 2022-01-19
          • 2021-06-06
          • 2015-01-05
          • 2015-04-09
          • 1970-01-01
          • 2015-01-05
          相关资源
          最近更新 更多