Проблема:
Я должен разработать алгоритм, который делает для меня следующее:
Скажи, что у меня есть строка (например)
alert tcp 192.168.1.1 (caret is currently here)
Алгоритм должен обработать эту строку и вернуть значение 4.
Я что-то кодировал для этого, я знаю, что он небрежный, но он работает, частично.
private int counter = 0;
public void determineRuleActionRegion(String str, int index) {
if (str.length() == 0 || str.indexOf(" ") == -1) {
triggerSuggestionList(1);
return;
}
//remove duplicate space, spaces in front and back before searching
int num = str.trim().replaceAll(" +", " ").indexOf(" ", index);
//Check for occurances of spaces, recursively
if (num == -1) { //if there is no space
//no need to check if it's 0 times it will assign to 1
triggerSuggestionList(counter + 1);
counter = 0;
return; //set to rule action
} else { //there is a space
counter++;
determineRuleActionRegion(str, num + 1);
}
} //end of determineactionRegion()
Так что в основном я нахожу для пробела и определяю регион (количество набранных слов). Тем не менее, я хочу, чтобы он изменился при нажатии пользователем пробела <space character>
.
Как я могу использовать текущий код?
Или еще лучше, как один предложил бы мне сделать это правильно ? Я рассчитываю на BreakIterator для этого случая ...
Чтобы добавить к этому, Я считаю, что мой алгоритм не будет работать для нескольких предложений . Как мне решить эту проблему .
-
Источник String str получен из textPane.getText(0, pos + 1);
, JTextPane.
Заранее спасибо. Дайте мне знать, если мой вопрос все еще недостаточно конкретен.
-
Больше примеров:
alert tcp $EXTERNAL_NET any -> $HOME_NET 22 <caret>
return -1 (максимум набираемого текста 7 слов)
alert tcp 192.168.1.1 any<caret>
вернуть 4 (как это все еще на 2-м аргументе)
alert tcp<caret>
возврат 2 (как и во втором аргументе)
alert tcp <caret>
возврат 3
alert tcp $EXTERNAL_NET any -> <caret>
возврат 6
Это что-то вроде команд оболочки. Как указано выше. Хотя я думаю, что это не сильно отличается, я верю, я просто хочу знать, сколько аргументов набрано. Спасибо.
-
псевдокод
Get whole paragraph from textpane
if more than 1 line -> process the last line
count how many arguments typed and return appropriate number
else
process current line
count how many arguments typed and return appropriate number
End