Java字符串拆分返回空结果

时间:2014-05-03 19:11:42

标签: java regex string

鉴于输入始终以0开头,然后如下: c1 +出现,其中c1是字符,出现是重复相同字符的序列。 例如,aabbaaacccc变为0a2b2a3c4,字符将始终为小写a-z。

现在我的问题输入为: 0x1k1c4t11g3d1m1d1j10f1v1n3e2r3i1e2a1h4a2e1y1z2e1s1a1q1j2r1k2t3h1i1f4j1d2m4p3 但是,当我使用String.split()并迭代结果时,我得到空字符串。我尝试使用split("[0-9]")split("[^a-z]"),但结果不会改变。

我的例子的迭代结果是:

x
k
c
t

g
d
m
d
j

f
v
n
e
r
i
e
a
h
a
e
y
z
e
s
a
q
j
r
k
t
h
i
f
j
d
m
p

这是JDK中的错误还是我的正则表达式有问题?

4 个答案:

答案 0 :(得分:1)

这里的问题似乎是你用一个正则表达式分开,它只是一个数字或字符,当你得到一个两位数字时你有一个空字符串,例如t11你得到t1而你松开了最后1,如果你想取整数,你需要在正则表达式寻找后加上+,例如在这种情况下你应该放。 拆分(" [0-9] +")无论您拥有多少位数,您都可以得到整数。

答案 1 :(得分:0)

正如Vulcan在评论中所述,这是由于至少存在两个导致空String的连续数字而引起的。 也许您想首先从String中删除任何数字,或者显然,删除结果数组中的空字符串。 例如:

s = "0x1k1c4t11g3d1m1d1j10f1v1n3e2r3i1e2a1h4a2e1y1z2e1s1a1q1j2r1k2t3h1i1f4j1d2m4p3";    
s = s.replaceAll("\\d","");

答案 2 :(得分:0)

在这种情况下,我不认为使用字符串split()是个好主意。如果你在这种情况下使用substringcharAt()会更好,然后尝试考虑一个计算出现次数的循环。

答案 3 :(得分:0)

您需要按零长度模式进行拆分。一个lookahead assertion是非捕获的,是要走的路:

String str = "0d1j10f1";
str.split("(?=[a-z])");
// result: ["0", "d1", "j10", "f1"]


此外,正如其他答案中所指出的,请记住,数字可以是多位数。