在Visual Basic中只用一次文本替换字符串一次?

时间:2018-10-06 20:33:14

标签: vb.net

,我在程序中无法使用某些功能。我正在尝试删除文本框中的单个字符串实例,而不是文本框中的所有字符串实例。

这是我要在其中执行此功能的按钮的代码:

myTable.filter

因此,此代码用空字符替换了codon.text中的字符串,换句话说,将其删除。

Here is the picture, for better context.

当我单击按钮时,光标悬停在上方,它将删除每个UUG实例。我想看看是否有办法只删除一个UUG实例。

2 个答案:

答案 0 :(得分:2)

String.Replace在控制您可以用另一个替换字符串的哪个部分或多少部分方面没有提供太多帮助。它将替换遇到的所有指定子字符串或字符(取决于所使用的方法的重载)。

[TextBox].Text = [TextBox].Text.Replace("[SubString]", "")

将所有找到的"[SubString]"替换为空字符串。


您可以使用Regex.Matches创建MatchCollection的元素,这些元素满足给定的String输入和要匹配的值的条件。

[result group] = Regex.Matches([InputString], [Match Pattern])

MatchCollection将返回找到的Match个元素的集合。
检查[MatchCollection].Count值以验证搜索是否有任何有效结果。

每个Match标识其状态(布尔值Success),基础Value(模式){{1}中Index的{​​{1}}位置}}及其Value

示例:删除字符串[InputString]在字符串Length中的第二次出现:

"UUG-"

input的结果:

Imports System.Text.RegularExpressions

Dim input As String = "UUG-AAA-UUG-CAC-ACC-GGG-GGG-"
Dim xMatches As MatchCollection = Regex.Matches(input, "UUG" & "-")

Dim output As String = input.Remove(xMatches(1).Index, xMatches(1).Length)

您没有在输入字符串中指定要删除的元素。通过此方法,您可以使用其output位置和/或显示顺序选择哪个。

答案 1 :(得分:2)

您不使用字符串-您正在使用代码集。
因此,请考虑将全字符串作为唯一的格式,用于显示现有代码,但会对集合进行操作。

然后,您的代码对其他人(而不是Regex;)来说将看起来更简单易懂

Dim allCodes As New List(Of String) From { "UUG", "UUG", "CAC", "ACC", "GGG", "GGG" }

' Display all codes
codon.Text = String.Join("-", allCodes) 'output: UUG-UUG-CAC-ACC-GGG-GGG

' Remove the first appearance of given value
allCodes.Remove("UUG") ' allCodes => { "UUG", "CAC", "ACC", "GGG", "GGG" }

只需一行可理解的代码。
List.Remove-删除第一次出现的特定对象

使用您的代码进行的其他操作应足够简单。根据您的逻辑,您可以使用多个集合,然后使用代码,将其转换为字符串以显示给用户。

如果要坚持使用当前的实现,则只需将字符串转换为代码列表,删除首次出现的代码,然后转换回字符串。

Dim codes As String = "UUG-UUG-CAC-ACC-GGG-GGG-"

Dim list = codes.Split("-"c).ToList()
list.Remove("UUG")

codes = String.Join("-", list) 'output: UUG-CAC-ACC-GGG-GGG-