我的工作是遍历一棵树并在目标词周围添加html标签,并带有以下约束:
可标记词是一系列不是其中一部分的字母 另一个词,可能有以下标点之一 最后一个字符:句号'。',逗号',',问号'?',感叹号 点'!',冒号':'和分号';'。
请注意,可标记的单词可能嵌入在更长的部分中 文本(例如在“快速棕狐”中标记“快速”),并且可以 在包含文本中多次出现。
另一个例子,如果你被要求在“牛”周围添加一个粗体标签, 你会标记整个单词,以及最后一个字符标点符号, 在下列情况下:“牛”,“牛!”,“牛?”,“牛。”,“牛;”,“牛:”, “COW”,“cOw”。那就是你会有“牛”,“牛!”,“牛?”,“牛。”, “牛:”,“牛;”,“COW”,“cOw”(最后两个不区分大小写 匹配)。
但是你不会用这些词来标记“牛”:“奶牛”,“cowabunga”(in 这两种情况,不是一个字,而是一个更大的词的一部分),“?奶牛”, (不只是字母,标点符号不是最后一个字符)“牛?!!”,(只有一个 最后的标点字符是可以接受的),“牛的”(撇号 不是一封信。)
遍历树是没有问题的,但是我在设置一个块时遇到问题,该块将决定添加标签的正确位置:
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);
}
此时我有一个我知道的短语包含分割成一个数组的标签,每个单词都是分开的。我不知道从哪里开始,因为我需要在某个时候考虑案例,并且还要有一些标点字符。
答案 0 :(得分:0)
你应该看看Pattern
类似的东西:
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