我想从获得输出
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