2016-10-19 1 views
0

Je suis en train de cartographier deux StringBuilders:StringBuilder compte virgule et trouver la position

string builder1 ="abc1,abc2,abc3,abc4,abc2" 
string builder2="100,30,15,102,30" 

les deux StringBuilders comptent seront les mêmes et déjà tracé. Mais je suis à la recherche d'un nombre particulier 30 et nom comme abc2

-à-dire find(30,abc2) et retirez-le

donc j'ai besoin de garder une trace de la virgule ou quelqu'un pourrait-il me suggérer les meilleures pratiques pour supprimer la chaîne je ne vouloir dans la position appropriée.

+0

Peut-être utiliser un [** 'Regex' **] (https://msdn.microsoft.com/en-us/library/system.text.regularexpressions.regex (v = vs.110) .aspx)? - [** Regular Expressions Language - Référence rapide **] (https://msdn.microsoft.com/fr-fr/library/az24scfc (v = vs.110) .aspx). –

+0

Okay va essayer d'utiliser regex. comme je ne peux pas utiliser le tableau il y a une contrainte de mémoire. –

+1

Il est mignon comment vous pensez qu'un tableau utilisera moins de mémoire qu'un StringBuilder. *** TEST *** avant de faire des hypothèses. –

Répondre

1

Sans utiliser Regex, il est probablement plus facile de transformer la chaîne en une liste, supprimer les éléments, puis recréez la liste:

StringBuilder sb1 = new StringBuilder("abc1,abc2,abc3,abc4,abc2"); 
string find1 = "abc2"; 
var newList = sb1.ToString().Split(',').ToList(); 
newList.RemoveAll(x => x == find1); 
string result = string.Join(",", newList.ToArray()); 

Pour la version VB.Net:

Dim sb1 As New StringBuilder("abc1,abc2,abc3,abc4,abc2") 
Dim find1 As String = "abc2" 
Dim newList As New List(Of String)(sb1.ToString().Split(","c).ToList) 
newList.RemoveAll(Function(x) x = find1) 
Dim result As String = String.Join(",", newList.ToArray()) 
+0

est-il un moyen de diviser ou de différencier directement à partir du constructeur de chaîne. sans utiliser une liste. –

+0

Comme toute nouvelle variable que je déclare entraîne une exception de mémoire insuffisante –

+0

Quelle est la taille de la chaîne avec laquelle vous traitez? – LarsTech

1

Alors Je vois 4 cas:

  • égaux à "abc2" (semble très peu probable)
  • contient ",abc2,"
  • commence par "abc2,"
  • se termine par ",abc2"

Sub removeCSVvalue(sb As StringBuilder, value$) 
    If sb.Length <= value.Length Then sb.Replace(value, vbNullString) : Return ' If sb = value 
    sb.Replace("," & value & ",", ",") ' Example: replace ",abc2," with "," 
    Dim C = value.Length 
    If sb.Length > C Then If sb(C) = "," Then If sb.ToString(0, C) = value Then sb.Remove(0, C + 1) ' If sb.StartsWith(value & ",") 
    Dim L = sb.Length - C 
    If sb.Length > C Then If sb(L - 1) = "," Then If sb.ToString(L, C) = value Then sb.Length = L - 1 ' If sb.EndsWith("," & value) 
End Sub 

P.S. cela me rappelle ma première réponse downvoted Remove item from string array:]