Java StringTokenizer在错误的分隔符上断开字符串

Java StringTokenizer在错误的分隔符上断开字符串,java,Java,我使用java中的StringTokenizer对字符串进行标记,如下所示是我的代码 import java.util.StringTokenizer; public class Test { public static void main(String[] args) { String str = "key1@@@@@val1#####key2@@@@@val2#####key3@@@@@val3#####key4@@@@@val4###val4###val4####

我使用java中的StringTokenizer对字符串进行标记,如下所示是我的代码

import java.util.StringTokenizer;

public class Test {
    public static void main(String[] args) {
        String str = "key1@@@@@val1#####key2@@@@@val2#####key3@@@@@val3#####key4@@@@@val4###val4###val4#####key5@@@@@val5";

        StringTokenizer st = new StringTokenizer(str,"#####");
        while(st.hasMoreTokens()){
            System.out.println(st.nextElement());
        }
    }

}
输出是

键1@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

键2@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

键3@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

键4@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

瓦尔4

瓦尔4

键5@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

实际上,分隔符是这样的,所以它在

预期产量

键1@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

键2@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

键3@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

键4@@@@val4val4val4

键5@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

我知道我可以使用另一个分隔符,但我想知道这背后的确切原因。

StringTokenizer根据提供的delim参数中的每个字符进行拆分

在您的例子中,您生成了一个StringTokenizer,它只根据

来自

。。。。delim参数中的字符是分隔标记的分隔符。 分隔符字符本身不会被视为标记


在StringTokenizer中,指定将用作分隔符的字符

你的线路

StringTokenizer st = new StringTokenizer(str, "#####");
相当于

StringTokenizer st = new StringTokenizer(str, "#");
要理解这个案例,你可以这样做

StringTokenizer st = new StringTokenizer(str, "#@");

delimeter是一个不被视为标记的字符,因此也可以将其称为delimeter,它将为您提供相同的输出。引用

delim参数中的字符是分隔标记的分隔符。分隔符本身不会被视为标记

因此,任何被称为delimeter的字符都将被完全忽略,剩下的字符串将被标记化

并引用同一来源的信息作为更好的选择:-


StringTokenizer是一个遗留类,尽管新代码中不鼓励使用它,但出于兼容性原因保留它。建议任何寻求此功能的人改用String的split方法或java.util.regex包


使用string.split

如果要使用多个分隔符来分隔字符串,可以使用以下示例

    String msg = "http://192.173.15.36:8084/";
    StringTokenizer st = new StringTokenizer(msg, "://.");
    while (st.hasMoreTokens()) {
        System.out.println(st.nextToken());
    }

更多详细信息

StringTokenizer是一个遗留类,出于兼容性原因保留了它,尽管新代码中不鼓励使用它。建议任何寻求此功能的人改用String的split方法或java.util.regex包-