2016-10-19 11 views
0

Я пытаюсь сопоставить два StringBuilders: подсчитыватьStringBuilder подсчитывать запятая и найти позицию

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

оба StringBuilders будут одинаковыми и уже нанесены на карту. Но я ищу для определенного числа 30 и имя, как abc2

т.е. find(30,abc2) и удалить его

так что мне нужно следить за запятой или кто-то может предложить мне лучшие практики, чтобы удалить строку я не делаю хотите в соответствующей позиции.

+0

Возможно, используйте [** 'Regex' **] (https://msdn.microsoft.com/en-us/library/system.text.regularexpressions.regex (v = vs.110) .aspx)? - [** Язык регулярных выражений - краткая справочная информация **] (https://msdn.microsoft.com/en-us/library/az24scfc (v = vs.110) .aspx). –

+0

Хорошо будет пытаться использовать регулярное выражение. поскольку я не могу использовать массив, есть ограничение памяти. –

+1

Это мило, как вы думаете, что массив будет использовать меньше памяти, чем StringBuilder. *** ТЕСТ ***, прежде чем делать предположения. –

ответ

1

Без использования Regex, вероятно, проще превратить строку в список, удалить элементы, а затем воссоздать список:

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()); 

Для версии 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

есть способ разделить или дифференцировать непосредственно от построителя строк. без использования списка. –

+0

Как и любая новая переменная, я объявляю результаты исключения из памяти –

+0

Насколько велика строка, с которой вы имеете дело? – LarsTech

1

Так Я вижу 4 случая:

  • равна "abc2" (кажется очень маловероятным)
  • содержит ",abc2,"
  • начинается с "abc2,"
  • заканчивается ",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. это напоминает мне мой первый ответ вниз Remove item from string array:]

 Смежные вопросы

  • Нет связанных вопросов^_^