带有空标记的Java StringTokenizer

时间:2014-08-26 07:40:51

标签: java stringtokenizer

我有一个字符串看起来像 - 56,0,76,0,93 ,,,,,,, 1230。 我使用StringTokenizer将其拆分为','。然而,似乎这是从93直线跳到1230.有没有办法让它在移动到1230之前返回六个空字符串?

7 个答案:

答案 0 :(得分:1)

returnDelims设置为true

的情况下使用StringTokenizer(String str, String delim, boolean returnDelims)
  

如果returnDelims标志为true,则分隔符字符也将作为标记返回。每个分隔符都以长度为1的字符串形式返回。

答案 1 :(得分:1)

改为使用String.split()方法。

String str = "56,0,76,0,93,,,,,,,1230";
String[] stringArr = str.split(",");

这将返回一个String数组。

答案 2 :(得分:1)

String.split("", - 1); 如果没有-1,它将忽略尾随分隔符

答案 3 :(得分:1)

使用String#split(regex,limit)limit作为-1

示例代码:

System.out.println(Arrays.toString(",,-56,0,76,0,93,,,,,,,1230,".split(",",-1)));

输出:

[, , -56, 0, 76, 0, 93, , , , , , , 1230, ]

答案 4 :(得分:1)

StringTokenizer有一个构造函数,它接受3个参数,第三个是一个布尔值,控制是否将分隔符作为标记返回。你应该把它设置为真。

new StringTokenizer(yourString, yourDelimiters, true);

现在也返回分隔符,通过检查两个连续的标记是否是分隔符,很容易判断是否存在空字符串。

您可以扩展tokenizer或编写自己的包装类以供重用。

答案 5 :(得分:0)

使用Google的Guava lib Splitter

String str = "56,0,76,0,93,,,,,,,1230";
Iterable<String> splitResult = Splitter.on(",").split(str);

并转换为ArrayList

ArrayList<String> elementList = Lists.newArrayList(splitResult);

elementList.size(); // 12

答案 6 :(得分:0)

请查找工作副本以克服空令牌

public class TestStringTokenStrict {

/**
 * Strict implementation of StringTokenizer
 * 
 * @param str
 * @param delim
 * @param strict
 *            true = include NULL Token
 * @return
 */
static StringTokenizer getStringTokenizerStrict(String str, String delim, boolean strict) {
    StringTokenizer st = new StringTokenizer(str, delim, strict);
    StringBuffer sb = new StringBuffer();

    while (st.hasMoreTokens()) {
        String s = st.nextToken();
        if (s.equals(delim)) {
            sb.append(" ").append(delim);
        } else {
            sb.append(s).append(delim);
            if (st.hasMoreTokens())
                st.nextToken();
        }
    }
    return (new StringTokenizer(sb.toString(), delim));
}

static void altStringTokenizer(StringTokenizer st) {
    while (st.hasMoreTokens()) {
        String type = st.nextToken();
        String one = st.nextToken();
        String two = st.nextToken();
        String three = st.nextToken();
        String four = st.nextToken();
        String five = st.nextToken();

        System.out.println(
                "[" + type + "] [" + one + "] [" + two + "] [" + three + "] [" + four + "] [" + five + "]");
    }
}

public static void main(String[] args) {
    String input = "Record|One||Three||Five";
    altStringTokenizer(getStringTokenizerStrict(input, "|", true));
}}

输出

[Record] [One] [ ] [Three] [ ] [Five]