62,616
社区成员
发帖
与我相关
我的任务
分享
<table width="200" border="1">
<tr>
<td> 1 </td>
<td>2 </td>
<td>3 </td>
</tr>
<tr>
<td>4 </td>
<td>5 </td>
<td> 6 </td>
</tr>
<tr>
<td> 7 </td>
<td>8 </td>
<td rowspan="2"> 9 </td>
</tr>
<tr>
<td> </td>
<td> </td>
</tr>
</table>
<table width="200" border="1">
<tr>
<td> <a href="link6">1 </a></td>
<td><a href="link7">2 </a></td>
<td>3 </td>
</tr>
<tr>
<td>4 </td>
<td>5 </td>
<td> 6 </a> </td>
</tr>
<tr>
<td> 7 </td>
<td> <a href="link8">8 </a> </td>
<td rowspan="2"> <a href="link8"> 9 </a> </td>
</tr>
<tr>
<td> </td>
<td> </td>
</tr>
</table>
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Pattern;
public class Test01 {
public static void main(String[] args) {
String str =
"<table width=\"200\" border=\"1\">\n" +
" <tr>\n" +
" <td>1 </td>\n" +
" <td>2 </td>\n" +
" <td>3 </td>\n" +
" </tr>\n" +
" <tr>\n" +
" <td>4 </td>\n" +
" <td>5 </td>\n" +
" <td>6 </td>\n" +
" </tr>\n" +
" <tr>\n" +
" <td>7 </td>\n" +
" <td>8 </td>\n" +
" <td rowspan=\"2\">9 </td>\n" +
" </tr>\n" +
" <tr>\n" +
" <td> </td>\n" +
" <td> </td>\n" +
" </tr>\n" +
"</table>";
List<String> list = new ArrayList<String>();
list.add("1");
list.add("6");
list.add("7");
list.add("8");
list.add("9");
Nil2000 nil = new Nil2000(list);
System.out.println(nil.processLinks(str));
}
}
class Nil2000 {
private List<String> links;
private Pattern pattern;
private final static String REGEX_PREFIX = "(<td[^>]*>)\\s*";
private final static String REGEX_SUFFIX = "\\s*(</td>)";
private final static String PROCESS_RESULT = "$1<a href=\"link$2\">$2</a>$3";
public Nil2000(List<String> links) {
setLinks(links);
}
public String processLinks(String str) {
compileRegex();
return pattern.matcher(str).replaceAll(PROCESS_RESULT);
}
public void setLinks(List<String> links) {
this.links = links;
this.pattern = null;
}
private void compileRegex() {
if(pattern != null) {
return;
}
pattern = Pattern.compile(generateRegex());
}
private String generateRegex() {
StringBuffer sb = new StringBuffer(REGEX_PREFIX + "(");
for(int i = 0, k = links.size(); i < k; i++) {
if(i > 0) {
sb.append("|");
}
sb.append(links.get(i));
}
sb.append(")" + REGEX_SUFFIX);
return sb.toString();
}
}