Java StringTokenizer不能与delim正常工作//&引用;
我试图在delim“/”上断开字符串。我的字符串还包含“/”和StringTokenizer,它们给出了奇怪的结果,它还在“/”上打断字符串 结果是Java StringTokenizer不能与delim正常工作//&引用;,java,string,stringtokenizer,Java,String,Stringtokenizer,我试图在delim“/”上断开字符串。我的字符串还包含“/”和StringTokenizer,它们给出了奇怪的结果,它还在“/”上打断字符串 结果是 abcd aaa 32434 3 34343 abcd aaa 32434 3/34343 预期的结果是 abcd aaa 32434 3 34343 abcd aaa 32434 3/34343 为什么会发生这种情况,解决办法是什么?我不想用其他字符替换“/”。来自: Str
abcd
aaa
32434
3
34343
abcd
aaa
32434
3/34343
预期的结果是
abcd
aaa
32434
3
34343
abcd
aaa
32434
3/34343
为什么会发生这种情况,解决办法是什么?我不想用其他字符替换“/”。来自:
StringTokenizer实例的行为有两种方式之一,这取决于它是使用值为true或false的returnDelims标志创建的:
- 如果标志为false,则分隔符字符用于分隔标记。标记是非分隔符的最大连续字符序列
- 如果标志为true,则分隔符字符本身被视为标记。因此,标记可以是一个分隔符字符,也可以是非分隔符的连续字符的最大序列
StringTokenizer
将始终在连续分隔符字符上拆分,而不是在分隔符字符串本身上拆分。因此,您的拆分是“任意数量的斜杠或斜杠”<代码>/是两个斜杠或两个斜杠<代码>/是一个斜杠或一个斜杠。因此,StringTokenizer
将匹配这两个序列作为分隔符
换句话说,您的
StringTokenizer
相当于在以下正则表达式上拆分:[/]+
,而不是像您所想的那样/
。StringTokenizer
将这两个标记作为单独的标记,并对它们进行标记。因此,它对/
和/
进行标记化,从而得到结果
我更喜欢
StringTokenizer
。它更容易使用,并且有更多的选择。它可以以Regex
作为参数,并返回array
oftokens
的值,您可以稍后使用:-
String mStr = "abcd//aaa//32434//3/34343";
String[] arr = mStr.split("//");
System.out.println(Arrays.toString(arr));
输出:-
[abcd, aaa, 32434, 3/34343]
StringTokenizer
是一个非常简单的类。如果您想要一个类似于标记器的功能,可以使用,因为它将delimeter字符串视为正则表达式
String mStr = "abcd//aaa//32434//3/34343";
Scanner scanner = new Scanner(mStr);
scanner.useDelimiter("//");
while (scanner.hasNext()) {
System.out.println(scanner.next());
}
-
split()
方法的字符串
可以很好地使用/
和分隔符
public class Reg {
public static void main(String[] args){
String s = "abcd//aaa//32434//3/34343";
String[] arr = s.split("//");
for (String x : arr){
System.out.println(x);
}
}
}
预期结果是什么?我已经更新了问题@NikolayKuznetsov的预期结果