将参数替换为字符串数组

时间:2015-11-14 12:17:02

标签: arrays vb.net replace

好吧,我有文本文件包含这些字符串666 66 55 333 55例如我有两个字符串数组其中一个包含文本文件中的字符串而没有重复,其他值从1到array1大小我需要替换文本文件中的每个字符串,例如array1 = {666,66,333,55} array2 {1,2,3,4}文本文件应该是(1 2 4 3 4 )我尝试此代码时,问题就是替换{{1} } 661成为666,因此我认为1666的一部分我需要离开这个,很高兴知道此代码适用于其他情况,我的意思是666在文本文件中变为554变为333

3

1 个答案:

答案 0 :(得分:0)

以下是如何做到这一点:

创建以下功能:

Function Process(items As String()) As Integer()
    Dim dictionary = New Dictionary(Of String, Integer)

    Dim result = New List(Of Integer)

    For i = 0 To items.Length - 1
        Dim item = items(i)

        If Not (dictionary.ContainsKey(item)) Then
            Dim value = dictionary.Count + 1

            dictionary.Add(item, value)
            result.Add(value)
        Else
            result.Add(dictionary(item))
        End If
    Next

    Return result.ToArray()

End Function

此函数将一个字符串数组作为输入,并返回一个整数数组作为输出。

它使用Dictionary来存储字符串第一次出现的索引。

它使用此字典来检测项目之前是否已经出现,如果已经出现,则使用原始索引。

您可以像这样使用此功能:

Dim input_file = "c:\\input.txt"
Dim output_file = "c:\\output.txt"

Dim input = File.ReadAllText(input_file)

Dim items = input.Split(New String() {" "}, StringSplitOptions.RemoveEmptyEntries)

Dim output_items = Process(items)

Dim string_output_items = output_items.Select(Function(item) item.ToString()).ToArray()

Dim output = String.Join(" ", string_output_items)

File.WriteAllText(output_file, output)

<强>更新

如果您的输入文件包含行并且您想保留此类结构,请使用以下代码:

Dim input_file = "c:\\input.txt"
Dim output_file = "c:\\output.txt"

Dim input_lines = File.ReadAllLines(input_file)

Dim number_list = New List(Of String)
Dim numbers_per_line_list = New List(Of Integer)

For Each input_line As String In input_lines
    Dim numbers = input_line.Split(New String() {" "}, StringSplitOptions.RemoveEmptyEntries)
    number_list.AddRange(numbers)
    numbers_per_line_list.Add(numbers.Length)
Next


Dim output_numbers = Process(number_list.ToArray())

Dim string_output_numbers = output_numbers.Select(Function(item) item.ToString()).ToList()


Dim output_lines = New List(Of String)

For Each numbers_in_line As Integer In numbers_per_line_list

    Dim numbers_for_this_line = string_output_numbers.GetRange(0, numbers_in_line)

    string_output_numbers.RemoveRange(0, numbers_in_line)

    Dim line = String.Join(" ", numbers_for_this_line)

    output_lines.Add(line)
Next

File.WriteAllLines(output_file, output_lines)

此代码读取行而不是将整个文件作为单个字符串读取。并且对于每一行,它存储行中的项目数。当它将结果写入文件时,它使用这些信息向每行输出正确数量的项目。