我正在制作一个可以改变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整除的单词,但这不是问题。 此外,它不会返回任何错误消息。
答案 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()
...)。
最后,使用有意义的变量名称。 str
,str2
和arr
特别神秘,因为他们没有告诉读者对变量感兴趣的任何代码。
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