2013-11-08 3 views
0

Моей работы заключается, чтобы пересечь дерево и добавить HTML-тег вокруг целевого слова со следующим contstraints:Matching случай insenstive фраза из строки

taggable слово представляет собой последовательность букв алфавита, которая не является частью другого слова и может иметь одну из следующих пунктуаций. AS LAST CHARACTER: period '.', comma ',', вопросительный знак '?', восклицательный знак point '!', colon ':' и точка с запятой ';' ,

Обратите внимание, что taggable слова может быть встроено в более длинном куске текста (например, мечение «быстрый» в «Краткой бурой лисе»), и может произойти несколько раз в содержащем тексте.

В качестве другого примера, если бы вас попросили, чтобы добавить смелый тег вокруг «корова», вы бы помечать слово целиком, вместе с последним символом пунктуации, в следующих случаях: «корова» «корова», «коровы», «коровы», «коровы», «коровы», «COW», «cOw». То есть у вас были бы «коровы», «коровы», «коровы», «коровы». «корова:», «корова», «корова», «cOw» (последние две не чувствительны к регистру Матчи).

Но вы бы не помечать «корова» в этих словах: «коровы» «коровы», «Cowabunga» (в обоих случаях, а не слово само по себе, но часть большего слова), (не только буквы, знаки препинания не последний символ) «корова? !!», (допустимо только один знак препинания ), «коровы» (апостроф - это не письмо).

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

private void inorderAdd(TagNode root, String tag){ 
     if (root == null){ 
      return; 
     } 

     //Test if the tag is in the string at all 
     if(root.tag.contains(tag)){ 
      String text = root.tag; 
      String[] pieces = text.split(" "); 

      //check each array item for the target sequence 
      for(int i = 0; i < pieces.length-1; i++){ 
       if(pieces[i].contains(tag)){ 

       } 
      } 
     } 

     inorderAdd(root.firstChild, tag); 
     inorderAdd(root.sibling, tag); 

}

В этом point У меня есть фраза, которую я знаю, содержит тег, разделенный на массив, с каждым разделенным словом. Я не уверен, куда идти отсюда, так как мне нужно рассмотреть случай в какой-то момент, а также иметь несколько символов пунктуации.

+0

Этот сайт не должен рассматриваться в качестве кода генератор. –

+0

Это не то, что я ищу, есть ли способ избежать множества операторов if для каждого знака препинания или варианта варианта тега? – user2812890

ответ

0

Вы должны смотреть на шаблон

Что-то вроде:

Pattern reg = Pattern.compile("\\b(" + tag + "[!.:?]?)\\b", Pattern. CASE_INSENSITIVE) 

Тогда вы должны быть в состоянии проверить состояние так:

Matcher m = reg.matcher(text) 
    ... 
if (m.matches()) //true if found a match 

m.start(1)/m.end(1) //get the exact location of matched word 
Смежные вопросы