我使用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();
答案 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+"'");
}