1
我正在尋找包含分隔符的StringTokenzier的GWT兼容替代品。任務不能由正則表達式解決,因爲語法不是上下文無關的。如何在GWT中替換StringTokenzier(...,true)?
示例:提取泛型類型定義的第一級。所以對於List<String>, Map<Integer, Map<Character, Boolean>>, Set<List<Double>>
,我想要一個包含三個項目的列表。 List<String>
和Map<Integer, Map<Character, Boolean>>
和Set<List<Double>>
剝離下來的例子代碼:
private static List<String> extractFirstLevel(String type) {
List<String> res = new LinkedList<String>();
StringTokenizer st = new StringTokenizer(type, "<>,", true);
int nesting = 0; // we are only interested in nesting 0
String lastToken = "";
while (st.hasMoreTokens()) {
String token = st.nextToken();
if (token.equals("<")) {
nesting++; // ignore till matching >, but keep track of additional <
lastToken = lastToken + "<";
} else if (token.equals(">")) {
nesting--; // up one level
lastToken = lastToken + ">";
} else if (token.equals(",")) {
if (nesting == 0) { // we are interested in the top level
res.add(lastToken);
lastToken = "";
} else { // this is a , inside a < >, so we are not interested
lastToken = lastToken + ", ";
}
} else {
lastToken = lastToken + token.trim();
}
}
res.add(lastToken);
return res;
}
你可以使用String.split()方法。通常這對於StringTokenizer來說是一個非常好的選擇,但我不知道獲取標記器返回分隔符的部分。 –
我不認爲split()會讓我感覺到任何地方,因爲它僅用於正則表達式。 – Wassersturm
是的,儘管我的意思是你可以使用「<>」作爲你的正則表達式來分割。它會起作用,但在你的標記器中,你希望它能夠正確地返回分隔符?如果這是100%需要,那麼你堅持使用StringTokenizer,並沒有替代方案存在(我知道)。 –