为什么StringTokenizer无法正常用作$$作为分隔符

时间:2013-01-16 08:44:18

标签: java string tokenize stringtokenizer

我使用StringTokenizer$$的字符串标记为分隔符,但如果我的字符串类似于$1$dga74,则会从第一个$对其进行标记。任何人都可以告诉我为什么会发生这种情况,我该怎么做才能解决这个问题。

String str="/getCPage.asp?m=total&sub=$1$dga74$$/getEpage.asp?m=tatal&sub=0";
StringTokenizer tok=new StringTokenizer(str,"$$")
String url1=tok.nextToken();
String url2=tok.nextToken();

2 个答案:

答案 0 :(得分:8)

delim参数中的每个字符都被视为分隔符。如果指定"$$",则指定$两次(忽略第二个)。

要解决您的问题,您可以使用Scanner

public static void main(String[] args) {

    String s = "/getCPage.asp?m=total&sub=$1$dga74$$/getEpage.asp?m=tatal&sub=0";

    Scanner scanner = new Scanner(s);
    scanner.useDelimiter("\\$\\$");

    System.out.println(scanner.next());
    System.out.println(scanner.next());
}

输出:

/getCPage.asp?m=total&sub=$1$dga74
/getEpage.asp?m=tatal&sub=0

答案 1 :(得分:0)

StringTokenizer仅适用于单个字符标记。

您可以使用Pattern和一个简单的循环来获得您想要的结果:

List<String> res = new ArrayList<String>();
Pattern p = Pattern.compile("([$]{1,2}|=>?| +)");
String s = "$1$dga74$$";
Matcher m = p.matcher(s);
int pos = 0;
while (m.find()) {
    if (pos != m.start()) {
        res.add(s.substring(pos, m.start()));
    }
    res.add(m.group());
    pos = m.end();
}
if (pos != s.length()) {
    res.add(s.substring(pos));
}
for (String t : res) {
    System.out.println("'"+t+"'");
}