2016-09-03 1 views
0

Visual Basic 2010を使用しています文字列内の重複した番号を見つけて置き換え、重複した番号の1つを保持するにはどうすればよいですか?

文字列内の特定の重複番号を見つけて別の番号に置き換えようとしていますが、重複する文字列の1つを保持しています。たとえば、文字列が24828で、新しい文字列を24628にする必要があります。これは、8文字のうちの1文字を保持し、残りの8文字を6文字に置き換えます。私のコードでは、8文字と結果の両方を置き換えます。24626です。それは8の両方を6に置き換えている。誰も助けることができますか?注:この例では2つの重複した数字がありますが、私が必要とする特定の重複は8であり、2ではありません。また、どの8が置換または保持されても問題ありません。ありがとうございました!この記事への更新... 5桁の文字列は常に24828になるとは限りません。私は例としてこの文字列を使用しています。 8つの文字列がまったくない場合もあります。私は複数の文字列をチェックする必要があります。もし8文字があれば文字列を変更する必要はありません。

Dim strText As String = "24828" 
Dim newStrText As String = "" 
Dim nIndex = strText.IndexOf("8") 
If nIndex > -1 Then 
    MessageBox.Show("Found 8") 
    newStrText = strText.Replace("8", "6") 
    MessageBox.Show(newStrText) 
Else 
    MessageBox.Show("There is no 8") 
End If 

答えて

0

私はこれがきちんと動作すると思う:

Dim text = "24828" 

Dim split = text.Split("8"c) 
Dim result = If(split.Length > 1, _ 
    String.Join("6", split.Take(split.Length - 1)) + "8" + split.Last(), _ 
    text) 

私は24628を取得します。

+1

うわー、まさに私が必要なものです。私は可能なすべての文字列を試して、それはちょうど作品作品を動作します。あまりにもありがとうございます:) – Darryl

0
Dim OldText As String = "24828" 
Dim NewText As String = OldText.Replace("4828","4628") 
+0

私は申し訳ありません...私は文字列の5桁の数字が時々異なる数字になる可能性があると述べたはずです。私の例ではElse MessageBox.Show( "There is no 8")があります。これは、時には5桁の数字にも8をもたないことがあることを意味します。私は各桁をチェックし、それらのどれかが8であるかどうかを調べるために文字列が必要です.8がある場合は、さらに8があるかどうかを確認します。そうであれば、8を6に置き換えます。ただし、文字列に1つ以上の8がある場合は、常に1つの8を文字列に残します。希望は今、意味をなさない。再び、私は何が必要なのかについてはっきりしていないのは残念です。 – Darryl

0
Dim s = "24828" 
Dim i = s.IndexOf("8") 
If i >= 0 Then 
    Mid(s, i + 1, 1) = "6"  ' "24628" 
End If 

又は

Dim s = "24828" 
Dim s2 = Join(Split(s, "8", 2), "6") ' "24628" 

実際、Replace方法は、置き換えの数を制限するCountパラメーターを有する:

Dim s = "24828" 
Dim s3 = Replace(s, "8", "6", , 1) ' "24628" 

更新

私は全体の質問を読まなかった。

Dim s = "24828" 
Dim dupliates = (From d In s Group By d Into g = Group Where g.Count > 1 Select d).ToArray ' { "2"c, "8"c } 

または重複文字のインデックスを検索する:文字列内のすべての重複文字を見つけるために

Dim s = "24828" 
Dim count = Split(s, "8").Length - 1  ' 2 

8年代の数をカウントする

Dim s = "24828" 
Dim dupliateIndexes = Enumerable.Range(0, Len(s)).GroupBy(Function(i) s(i)).SelectMany(Function(g) g.Skip(1)).ToArray ' { 3, 4 } 
関連する問題