2013-01-16 48 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