[英]StringTokenizer split at “<br/>”
也許我是傻瓜,但我不明白為什么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
對我來說完全是無稽之談。
我怎樣才能讓它像我期望的那樣表現出來。
從文檔 :
delim參數中的字符是用於分隔標記的分隔符。 分隔符字符本身不會被視為令牌。
換句話說,告訴StringTokenizer
何時分離字符串的字符是:
當它匹配字符串中的任何字符(代碼中的變量escaped
)時, StringTokenizer
實例將拆分結果並刪除令牌。 您可以通過注意輸出中沒有出現字母r
來確認這一點。
相反,請使用String.split
,正如其他人所建議的那樣。
字符串中的每個字符都被視為用於拆分的標記。 因此,您的代碼會分解每個“&”,“l”,“t”,“;”,“b”,“r”,“/”或“g”字符(因為escapeHtml
將替換“<”和“> “分別與<
和>
。
您可能希望使用String.split
,它將正則表達式作為要拆分的東西:
String[] parts = object.split("<br/>");
要么
String[] parts = escaped.split(escapeHtml("<br/>"));
只需確保拆分令牌中沒有正則表達式特殊字符。
如果要將字符串/文本除以單詞而不僅僅是少數字符,則最好使用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
StringTokenizer使用每個字符進行拆分。
你需要使用拆分。 (雖然需要正則表達但要小心)
String[] lines = "some html string<br/>with line breaks<br/>".split("<br/>")
您不能將StringTokenizer與多字符分隔符一起使用。 解決問題的一種可能方法是將"<br>"
替換為您可以保證不會出現在字符串中的字符,然后使用該字符作為分隔符的StringTokenizer。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.