2015-01-13 4 views
0

я разделить входной пункт по . и хранить его в массиве, как это:Расчет количества слов из входного текста

string[] totalSentences = inputPara.Split('.') 

то функция ниже называется, который вычисляет общее количество слов из каждого предложения, как это :

public void initParaMatrix() 
{ 
    int size = 0; 
    for (int i = 0; i < totalSentences.Length; i++) 
    { 
     string[] words = totalSentences[i].Split(); 
     size = size + words.Length; 
     //rest of the logic here... 
    } 
    matrixSize = size; 
    paraMatrix = new string[matrixSize, matrixSize]; 
} 

paraMatrix является 2D-матрица равна длине всех слов, которые нужно сделать в моей логике. Проблема здесь, когда я ввожу только одно предложение, которое имеет 5 слов, переменная size получает значение 7. Я попробовал отладчик, и я получал итоговый результат предложений вместо .

Предложение 1. «Наши настоящие представления о движении». > Это фактическое предложение, которое имеет только 5 слов

Предложение 2. "" > Это точное второе предложение, которое я получаю.

Вот скриншот:

enter image description here

Почему я получаю два предложения здесь и как размер получать значение 7?

ответ

2

Это имеет смысл. Если второе предложение не имеет ничего, кроме «", и вы разделите его вдоль », то в результате вы получите две пустые строки. Проще всего сделать здесь изменить линию вы делаете раскол, и добавить обивку:

string[] words = totalSentences[i].Trim().Split(); 

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

+1

'Split (params char [] separator)' overload можно вызывать без передачи каких-либо параметров. По умолчанию используется разделение на символы пробела. Вместо этого они должны использовать параметр «Split (char [] separator, StringSplitOptions»). – juharr

+0

@ Daniel Gimenez: Я использовал метод Trim() ', но теперь я получаю итоговый счет как ** 6 **. Но когда я удаляю '.' В конце предложения (что я не могу сделать в реальном сценарии), проблема решена. В чем проблема с периодом в конце и почему его причиной увеличения счета? –

+0

@ Daniel Gimenez: 'StringSplit.RemoveEmptryEntries' сделал для меня работу. Подобно этому 'string [] words = totalSentences [i] .Split (new [] {" "}, StringSplitOptions.RemoveEmptyEntries);' Большое вам спасибо :) –

0

Вы не возвращаете значение целого числа в ноль. Вот почему вы получаете 7 для второго предложения. Для второго предложения, которое является пространством, попробуйте inputPara.Trim(), который должен удалить пробел в конце строки.

+0

Я попробовал 'inputPara.Trim()', но я все еще считаются как ** 6 ** –

+0

Вам нужно переместить размер = 0; внутри первого for-loop –

+0

Ну, я не могу этого сделать. Мне нужна сумма в моей логике. [Ответ Дэниела] (http://stackoverflow.com/a/27927455/3621001) решил мою проблему. Спасибо за помощь. –

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