Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 如果没有replace函数,如何替换字符串?_Vb.net - Fatal编程技术网

Vb.net 如果没有replace函数,如何替换字符串?

Vb.net 如果没有replace函数,如何替换字符串?,vb.net,Vb.net,我有一长串随机字母,我需要一次删除几个正面字母。通过使用replace函数,如果我替换一段字符串,然后在以后重复,它会将该段字符串从长字符串中完全移除,而不仅仅是从开始 有没有一种方法可以在不使用replace函数的情况下删除一段字符串?下面的代码可能会消除一些混淆 Dim protein As String protein = "GLSDGEWQQVLNVWGKVEADIAGHGQEVLIRLFTGHPETLEKFDKFKHLKTEAEMKASEDLKKHGTVVLT

我有一长串随机字母,我需要一次删除几个正面字母。通过使用replace函数,如果我替换一段字符串,然后在以后重复,它会将该段字符串从长字符串中完全移除,而不仅仅是从开始

有没有一种方法可以在不使用replace函数的情况下删除一段字符串?下面的代码可能会消除一些混淆

    Dim protein As String
    protein = "GLSDGEWQQVLNVWGKVEADIAGHGQEVLIRLFTGHPETLEKFDKFKHLKTEAEMKASEDLKKHGTVVLTALGGILKKKEGHHEAELKPLAQSHATKHKIPIKYLEFISDAIIHVLHSKHRPGDFGADAQGAMTKALELFRNDIAAKYKELGFQG"

    Dim IndexPosition




    For Each index In protein
        If index = "K" Or index = "R" Then

            IndexPosition = InStr(protein, index)  
            Dim NextPosition = IndexPosition + 1
            Dim NextLetter = Mid(protein, NextPosition, 0)

            If NextLetter <> "P" Then

                Dim PortionToCutOut = Mid(protein, 1, IndexPosition)
                protein = Replace(protein, PortionToCutOut, "")  
                Console.WriteLine(PortionToCutOut)



            End If


        End If
    Next index
Dim蛋白质作为字符串
protein=“GLSDGEWQVLNVWGKVEADIAGHGQEVILLFTGHPETLEKFFDKKFTEAEMKASEDKKKKKKKKKHGTVVLTLTGALGGILKKEGHHEAELKPLAQSHATKKKKIPIKYLEFISDAIIHLHSKHRPGDGADAQGAMTKALELFRNDIAKELGFQG”
暗不扩散
对于蛋白质中的每个指标
如果index=“K”或index=“R”,则
IndexPosition=InStr(蛋白质,指数)
Dim NextPosition=IndexPosition+1
Dim NextLetter=Mid(蛋白质,NextPosition,0)
如果下一个字母是“P”,那么
Dim PORTIONTOCUTTOUT=Mid(蛋白质,1,未展开)
蛋白质=替换(蛋白质,部分切除,“”)
控制台写入线(端口断路器)
如果结束
如果结束
下一个索引

您的代码有几个问题。可能引发异常的第一个问题是,您正在修改For/Each循环中的集合

第二个问题在直接影响方面不太严重,但在我看来同样重要的是,您使用的几乎都是遗留的Visual Basic方法

  • InStr应替换为IndexOf:
  • Mid应替换为子字符串:
第三个问题是,在条件语句中没有使用短路运算符
OrElse
将根据左侧是否为真来计算条件的右侧,而
将不考虑左侧是否为真来计算右侧

若要在不使用Replace的情况下删除一段字符串,那个么您也可以使用Substring

考虑这个例子:

Dim protein=“glsdgewqqvlnvgkvedaighqeflirlftghpetlekfdkkkhlkteaemkasedkkhgtvvltltgilkkeghaelkplaqshatkhkipikylefisdaihhkhrpgdfgadqgamtkalelfrndiaakelgfqg”
变暗计数器=0
Do While counter<蛋白质长度-2
计数器+=1
Dim currentLetter=蛋白质(计数器)
Dim nextLetter=蛋白质(计数器+1)
如果(currentLetter=“K”c或lse currentLetter=“R”c)和下一个“P”c,则
蛋白质=蛋白质子串(0,计数器)和蛋白质子串(计数器+1)
如果结束
环

示例:

正则表达式可能是解决此问题的更简单方法:

Regex.Replace(protein, "^(.*?)[KR][^P]", "$1")
它的意思是“从字符串的开头,对于零个或多个捕获的字符,直到第一次出现K或R,后跟p以外的任何字符,将其替换为(捕获的字符串)”

带^^^下划线的所有内容均替换为除xx位以外的所有内容

它只做了一个替换,因为这就是我在你说的时候解释你所需要的:

通过使用replace函数,如果我替换一段字符串,然后在以后重复,它将从长字符串中完全删除该字符串,而不仅仅是从开始

但是,如果要替换所有出现的“K或R后跟非p”,则会变得更简单:

Regex.Replace(protein, "[KR][^P]", "")

这是“K或R后跟除p以外的任何内容”,替换为“nothing”

将是您的最佳选择,找出您要保留或删除的内容,然后连接您需要的内容need@JayV你是个传奇,谢谢你。如何将此标记为已回答?
Regex.Replace(protein, "[KR][^P]", "")