Java StringTokenizer不能与delim正常工作//&引用;

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

我试图在delim“/”上断开字符串。我的字符串还包含“/”和StringTokenizer,它们给出了奇怪的结果,它还在“/”上打断字符串

结果是

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
of
tokens
的值,您可以稍后使用:-

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的预期结果