1

たとえば、次のような文字列があります。

    Dim str as string = xxxxxxxxxxxxxxxxxxxx£xxx£xxxx**£**xxxxxxxxxx

最後から常に特定の位置(たとえば11番目)にある£囲まれたものを削除したい。*文字列全体が長く、常にサイズが変化し、最初から数えることができません。私も使用できませんReplace。削除したくない他の位置に同じ文字がある可能性があります。


解決:

Dim rst As String = str.Remove(str.Length - 11, 1)
4

3 に答える 3

1

常に最後から11番目のキャラクターになる場合は、これを行うことができます...

    Dim strTargetString As String = "xxxYxxxxxxxxxx"
    Dim strTargetString2 As String = "xxxxxxxYxxxxxxxxxx"

    Dim strResult As String = Mid(strTargetString, 1, (Len(strTargetString) - 11)) & Microsoft.VisualBasic.Right(strTargetString, 10)
    Dim strResult2 As String = Mid(strTargetString2, 1, (Len(strTargetString2) - 11)) & Microsoft.VisualBasic.Right(strTargetString, 10)

String.SubStringは Mid よりも新しいアプローチですが、私は好みと例から使用しています

于 2012-04-20T18:42:08.483 に答える
1

編集:おっと、最初の部分で何を考えていたのかわかりません。

最初の部分の正しいバージョンは次のようになります。

str = str.Substring(0, str.Len -13) + str.Substring(str.Len-11);

またString.Delete、負の数を使用して文字列の末尾からの文字数を表すことができる関数のオーバーロードが存在する可能性もあります。C# の同等の関数がそうであることはわかっています。

于 2012-04-20T18:43:10.193 に答える
1

これは、先読みを使用した正規表現の置換操作でかなり簡単です。

Dim str as String = "xxxxxxxxxxxxxxxxxxxx£xxx£xxxx£xxxxxxxxxx"
Dim str2 as String = Regex.Replace(str, "£(?=.{10}$)", String.Empty)

これは、単一の文字に続いて任意の 10 文字、次に文字列の末尾を対象とし、それをString.Empty値に置き換えます (または必要に""応じて)。

于 2012-04-20T18:46:38.227 に答える