【问题标题】:I want to find in which position are all specific letters我想找出所有特定字母在哪个位置
【发布时间】:2017-06-21 14:37:07
【问题描述】:

我有这段文字:

“555”;”general”;”pfss”;”16”
“444”;”compa”;”sss”;”5”

Visual Basic 2008 速成版

我想找出所有的;

结果必须是:

5,15,22,32,40,46

【问题讨论】:

  • 好的,有什么问题?如果答案是我不知道该怎么做,你需要做一些(更多)研究。这不是一个教程网站
  • 我怀疑,通过获得这些位置,您想要拆分字段,另一个原因不会出现在脑海中。在这种情况下,研究Split :)
  • 我建议您查看TextFieldParser,而不是使用分隔符索引。

标签: vb.net


【解决方案1】:

没有现成的方法,但您可以轻松编写一种。例如作为扩展名:

Imports System.Runtime.CompilerServices

Module Extensions

    <Extension()>
    Public Function FindAllIndex(Of T)(ByVal items As IEnumerable(Of T), predicate As Func(Of T, Boolean)) As Int32()
        Dim allIndexes As New List(Of Int32)
        Dim index As Int32 = 0

        For Each item As T In items
            If predicate(item) Then
                allIndexes.Add(index)
            End If
            index += 1
        Next

        Return allIndexes.ToArray()
    End Function

End Module

用法:

Dim allIndexes as Int32() = text.FindAllIndex(Function(c) c = ";"c)

此通用版本支持任何类型和条件。它在VS2008下工作。

【讨论】:

    【解决方案2】:

    我建议使用 Linq 并处理文本中包含的回车/换行 - 至少如果您期望所需输出指定的确切索引。

    Dim chars = text.Replace(Environment.NewLine, String.Empty).ToCharArray()
    Dim positions = Enumerable.Range(0, chars.Length).Where(Function(i) chars(i) = ";"c).ToArray()
    

    注意
    此答案是针对上述输出值量身定制的 - 但是它很可能对您正在执行的任何任务都无济于事。


    免责声明:我从dieselc# Array.FindAllIndexOf which FindAll IndexOf的评论翻译了这个解决方案

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-08-02
      • 2013-08-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-27
      • 2019-05-12
      • 1970-01-01
      相关资源
      最近更新 更多