0

StringTokenizer用来标记一个带有$$分隔符的字符串,但如果我的字符串是这样的,$1$dga74那么它会从 first 标记这个$。任何人都可以告诉我为什么会发生这种情况以及我可以做些什么来消除这个问题。

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();
4

2 回答 2

7

参数中的每个字符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
于 2013-01-16T08:47:08.410 回答
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+"'");
}
于 2013-01-16T08:49:18.630 回答