2013-01-16 47 views
0

我使用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(); 
+3

我相信它能够支持单个字符的令牌delim参数only.'The字符是分隔符从[javadoc](http://docs.oracle.com/javase/1.4.2/docs/api/java/util/StringTokenizer.html)分离标记。 –

+0

您应该使用split代替 –

+1

'String [] splited = str.split(“$$”);'应该做你需要的 – Oren

回答

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 
+0

*注意:我建议使用'Scanner',因为它具有与您习惯的'StringTokenizer'功能相同的功能。* – dacwe

+0

感谢@dacwe,它对我很好 –

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+"'"); 
} 
+2

代码并不完美,只是为了给出想法! – TheWhiteRabbit