AppendLine and replacing



我想从获得输出

223-F456

223-F456
223-F456#
223-F4560
223-#456

我已经为此做了简单的代码,但只在行尾添加#,0就可以了:

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim sb As New StringBuilder
For Each line In TextBox1.Lines
sb.AppendLine(line)
sb.AppendLine(line & "#")
sb.AppendLine(line & "0")
sb.Replace(line.LastIndexOf("-") + 1, "#") -> this doesn't work 
Next
TextBox2.Text = sb.ToString

输出:

223-F456
223-F456#
223-F4560

字母并不总是"F":我想替换"-"之后的第一个字母,而不是替换"F",也可能有些连载有"F"字母,这不是我想要的。

简单的产品在商店里连续出现,但在"-"后替换字符串不起作用,也不显示,如果有任何帮助,我们将不胜感激。

您可以使用String.Remove和String.Insert,如下所示:

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim sb As New StringBuilder()
For Each line In TextBox1.Lines
sb.AppendLine(line)
sb.AppendLine(line & "#")
sb.AppendLine(line & "0")
Dim replaceAt = line.LastIndexOf("-") + 1
sb.AppendLine(line.Remove(replaceAt, 1).Insert(replaceAt, "#"))
Next
TextBox2.Text = sb.ToString()
End Sub

或者,如果你喜欢,那么你可以使用String.Substring函数:

sb.AppendLine(line.Substring(0, replaceAt) & "#" & line.Substring(replaceAt + 1))

也可以使用正则表达式来进行替换,我希望其他人可以想出更好的正则表达式,但这很有效:

Dim re As New Regex("(.*-)([^-])(.*)")
For Each line In TextBox1.Lines
' ...
sb.AppendLine(re.Replace(line, "$1#$3"))

问题是

line.LastIndexOf("-") + 1

将返回一个数字(指示在line中找到最后一个-字符的位置,加一(。

但是replace函数希望您告诉它要替换哪个字符串。您要替换F,而不是数字。(您当前的代码将解析为sb.Replace(4, "#"),显然找不到任何4可替换。(

如果您执行sb.Replace,它将替换您之前添加到字符串生成器中的所有版本的字符串。因此,在line中替换它,然后将line的修改版本附加到字符串生成器中会更有意义。

sb.AppendLine(line.Replace("F", "#"))

现场演示:https://dotnetfiddle.net/5BZAUg


编辑:

如果您需要替换-后面的任何字符,而不是F,您可以在line中找到字符索引,然后删除该索引处的字符并用另一个字符替换,例如

Dim index = line.LastIndexOf("-") + 1
sb.AppendLine(line.Remove(index, 1).Insert(index, "#"))

演示:https://dotnetfiddle.net/RTbiUG

最新更新