StringTokenizer拆分为“<br/>”

时间:2010-12-29 17:49:24

标签: java

也许我很愚蠢,但我不明白为什么StringTokenizer的行为在这里:

import static org.apache.commons.lang.StringEscapeUtils.escapeHtml;

String object = (String) value;
String escaped = escapeHtml(object);
StringTokenizer tokenizer = new StringTokenizer(escaped, escapeHtml("<br/>"));

如果是fx。价值是

Hej<br/>$user.get(0).name Har vundet<br/><table border='1'><tr><th>Name</th><th>Played</th><th>Brewed</th></tr>#foreach( $u in $user )<tr><td>$u.name</td> <td>$u.played</td> <td>$u.brewed</td></tr>#end</table><br/>

然后结果是

Hej
$use
.
e
(0).name Ha
 vunde
a
e 
o
de
='1'
h
Name
h
h
P
ayed
h
h
B
ewed
h
#fo
each( $u in $use
 )
d
$u.name
d

d
$u.p
ayed
d

d
$u.
ewed
d
#end
a
e

对我来说毫无意义。

我怎样才能让它按照我的预期行事。

5 个答案:

答案 0 :(得分:8)

来自documentation

  

delim参数中的字符是用于分隔标记的分隔符。   分隔符本身不会被视为令牌。

换句话说,告诉StringTokenizer何时分隔字符串的字符是:

  • &LT;
  • B'/ LI>
  • - [R
  • /
  • &GT;

当它匹配字符串中的任何字符(代码中的变量escaped)时,StringTokenizer实例将拆分结果并删除令牌。您可以通过注意输出中没有出现字母r来确认这一点。

使用String.split,而不是像其他人建议的那样。

答案 1 :(得分:2)

字符串中的每个字符都被视为用于拆分的标记。所以你的代码在每个“&amp;”,“l”,“t”,“;”,“b”,“r”,“/”或“g”字符上分开(因为escapeHtml将取代“ &lt;“和”&gt;“分别带有&lt;&gt;

您可能希望使用String.split将正则表达式作为要分割的东西:

String[] parts = object.split("<br/>");

String[] parts = escaped.split(escapeHtml("<br/>"));

请确保您的拆分令牌中没有正则表达式特殊字符。

答案 2 :(得分:1)

如果您想将字符串/文字除以一个单词而不仅仅是几个字符,那么最好使用String.split

我已经完成了测试:

public static void main(String[] args){
    String s = "Hej<br/>$user.get(0).name Har vundet<br/><table border='1'><tr><th>Name</th><th>Played</th><th>Brewed</th></tr>#foreach( $u in $user )<tr><td>$u.name</td> <td>$u.played</td> <td>$u.brewed</td></tr>#end</table><br/>";
    String[] lines = s.split("<br/>");
    for(String ss:lines)
        System.out.println(ss);
}

在这里你有结果:

Hej
$user.get(0).name Har vundet
<table border='1'><tr><th>Name</th><th>Played</th><th>Brewed</th></tr>#foreach( $u in $user )<tr><td>$u.name</td> <td>$u.played</td> <td>$u.brewed</td></tr>#end</table>

Tjena

答案 3 :(得分:0)

StringTokenizer使用每个字符进行拆分。

您需要使用拆分。 (虽然需要正则表达但要小心)

String[] lines = "some html string<br/>with line breaks<br/>".split("<br/>")

答案 4 :(得分:0)

您不能将StringTokenizer与多字符分隔符一起使用。解决问题的一种可能方法是将"<br>"替换为您可以保证不会出现在字符串中的字符,然后使用该字符作为分隔符的StringTokenizer。