簡體   English   中英

StringTokenizer拆分為“ <br/> ”

[英]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何時分離字符串的字符是:

  • <
  • b
  • [R
  • /
  • >

當它匹配字符串中的任何字符(代碼中的變量escaped )時, StringTokenizer實例將拆分結果並刪除令牌。 您可以通過注意輸出中沒有出現字母r來確認這一點。

相反,請使用String.split ,正如其他人所建議的那樣。

字符串中的每個字符都被視為用於拆分的標記。 因此,您的代碼會分解每個“&”,“l”,“t”,“;”,“b”,“r”,“/”或“g”字符(因為escapeHtml將替換“<”和“> “分別與&lt;&gt;

您可能希望使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM