帮助Visual Basic混合字符

时间:2011-08-27 12:22:33

标签: vb.net arrays for-loop character

我正在制作一个可以改变Word中两个字符位置的应用程序。

Imports System.IO
Module Module1

Sub Main()


    Dim str As String = File.ReadAllText("File.txt")
    Dim str2 As String() = Split(str, " ")
    For i As Integer = 0 To str2.Length - 1
        Dim arr As Char() = CType(str2(i), Char())

        For ia As Integer = 0 To arr.Length() - 1 Step 2
            Dim pa As String
            pa = arr(ia + 1)
            arr(ia + 1) = arr(ia)
            arr(ia) = pa
        Next ia
        For ib As Integer = 0 To arr.Length - 1
            Console.Write(arr(ib))
            File.WriteAllText("File2.txt", arr(ib))
        Next ib
        File.WriteAllText("File2.txt", " ")
        Console.Write(" ")

    Next i
    Console.Read()

End Sub

End Module

例如:

Input: ab
Output: ba
Input: asdasd asdasd
Output: saadds saadds

程序运行良好,混合字符很好,但它不会将文本写入文件。它将在控制台中写入文本,但不在文件中。

注意:程序只能处理可被2整除的单词,但这不是问题。 此外,它不会返回任何错误消息。

1 个答案:

答案 0 :(得分:2)

您的代码每次都会覆盖您使用单个空格(" ")编写的文件。

您应该只打开一次文件,并使用流编写器附加到该文件:

Using output = File.CreateText("file2.txt")
    ' Put the for loop here.    
End Using

您的代码还有其他一些问题。首先,使用For Each代替For,这使您的代码更加简单易读。其次,尽可能避免For循环。例如,不是迭代字符一次输出一个,只需从char数组创建一个新字符串,然后写下:

Dim shuffledWord As New String(arr)
output.Write(shuffledWord)

您的某些类型是完全错误的,即您在地方而不是String使用Char。您应始终使用Option Strict On。然后编译器将不会容忍这样的代码。

您还应该优先使用框架方法而不是VB特定的方法。这使得C#程序员更容易理解,也更容易翻译和更改(即使用Split字符串方法而不是自由函数,使用ToCharArray而不是强制转换为Char() ...)。

最后,使用有意义的变量名称。 strstr2arr特别神秘,因为他们没有告诉读者对变量感兴趣的任何代码。

Sub Main()
    Dim text As String = File.ReadAllText("File.txt")
    Dim words As String() = str.Split(" "c)
    Using output = File.CreateText("file2.txt")
        For Each word In words
            dim wordChars = word.ToCharArray()

            For i As Integer = 0 To wordChars.Length - 1 Step 2
                Dim tmp As Char = wordChars(i + 1)
                wordChars(i + 1) = wordChars(i)
                arr(i) = tmp
            Next

            Dim shuffledWord As New String(wordChars)
            output.Write(shuffledWord + " ")
            Console.Write(huffledWord + " ")
        Next
    End Using
    Console.Read()
End Sub