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