2010-09-20 2 views
2

Мне нужен код для подсчета количества запятых в строке richtextbox. Если есть 4 или более запятых, тогда сделайте что-нибудь, иначе удалите строку.Подсчитайте, сколько «запятых» находится в строке

+0

Интересно, какой ответ наиболее эффективен. –

+0

@Cristian Ciupitu: как и я - в таких случаях я бы предпочел выбрать наиболее читаемый: linq – zerkms

+0

@Cristian - если в строке меньше 1000 запятых, я не думаю, что производительность будет проблемой с любым из их. Я лично считаю, что ответ @ Jay - Rockinest !!! –

ответ

2

Это C#, но вы могли бы сделать что-то вроде этого:

int count = 0; 

foreach(char c in string) 
{ 
    if(c == ',') count++; 
} 

return count; 
0

что по этому поводу:

string test = "abc,123,dfg"; 
int count = test.Split(',').length - 1; 

жаль, что я с # парень. Вот vb.net (я думаю):

Dim test As String = "abc,123,dfg" 
Dim count As Integer = test.Split(',').length - 1 
4
Dim str As String = "Count, the, commas,,, !" 

    Dim count As Integer = 0 

    For Each c As Char In str 
     If c = "," Then 
      count += 1 
     End If 
    Next 

Голосовать за Dan @ ответ Demand, это просто версия VB.Net.

+1

Вы должны были поставить [ссылку на ответ Дэна] (http://stackoverflow.com/questions/3756262/count-how-many-commas-are-in-a-line/3756292#3756292). LE: если бы вы могли ... –

+1

Я бы мог, если бы мог (начал вопрос с 49 rep, 1 под то, что мне было нужно. – Crag

+0

Nvm, я получил его на работу. – Infodayne

1
var str = "Count, the, commas,,, !"; 
var answer = str.Length - str.Replace(",", "").Length; 
+0

С технической точки зрения, 'Replace' вызовет ненужные сдвиги в памяти. –

+0

@ Джош Стодола: Да, я только что опубликовал «еще один возможный способ сделать это». – zerkms

8

Вот обязательный LINQ ответ:

Dim cnt As Integer = yourString.Count(Function(ch) ch = ","c) 
+2

+1 - Эти выражения выглядят намного круче !!! и занимают гораздо меньше недвижимости. –

+0

Однако просто потому, что вы не видите, что реализация не означает, что вы не стоите этого. В этом случае не так уж плохо, линейное время, которое действительно невозможно улучшить для «неупорядоченной» индексированной коллекции, например Строка. Однако есть некоторые линейные Linq, которые выглядят очень элегантно, но выполняют на несколько порядков медленнее, чем эффективное итерационное решение. – KeithS

0
if(new RegEx(",").Match(s).Matches.Count > 4){ 
    //insert logic here 
} 

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

+2

вы потеряли исходную строку – zerkms

+0

Точка, я обновил пример. Моя первоначальная точка все еще стоит. –

+0

Никакой вопрос не будет полным без решения RegEx. –

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