0

StringTokenizeras delimiterで文字列をトークン化するために使用して$$いますが、私の文字列が似ている場合は$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区切り文字として扱われます。指定する場合は、2 回指定し"$$"ます$(2 回目は無視されます)。

問題を解決するには、次を使用できます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 は、1 文字のトークンのみで機能します。

と単純なループを使用して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 に答える