簡體   English   中英

Java字符串拆分返回空結果

[英]Java string split returns empty results

給定輸入總是從0開始,然后為:c1 +出現,其中c1是字符,出現是相同字符重復的序列。 例如aabbaaacccc變為0a2b2a3c4 ,字符將始終為小寫字母az。

現在我的問題輸入為: 0x1k1c4t11g3d1m1d1j10f1v1n3e2r3i1e2a1h4a2e1y1z2e1s1a1q1j2r1k2t3h1i1f4j1d2m4p3但是,當我使用String.split()和iterate結果時,得到了結果。 我嘗試同時使用split("[0-9]")split("[^az]")但結果沒有改變。

我的示例的迭代結果是:

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中的錯誤,還是我的正則表達式有問題?

這里的問題似乎是由正則表達式拆分的,正則表達式正好是一個數字或char,當您獲得兩位數的數字時,例如t11,您得到一個t1,然后松開最后一個1,如果您想取正則表達式要查找的內容之后需要加+的整數,例如,在這種情況下,您應該加。 split(“ [0-9] +”),無論有多少位數,您都將得到整數。

正如Vulcan在他的評論中指出的那樣,這是由於存在至少兩個連續的數字而導致空String引起的。 也許您想先從字符串中刪除任何數字,或者顯然是從結果數組中刪除空字符串。 例如:

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

我不認為在這種情況下使用String split()是個好主意。 如果在這種情況下使用substringcharAt()會更好,然后嘗試考慮將要計算出現次數的循環。

您需要按零長度模式進行分割。 不捕獲的前瞻性斷言是解決方法:

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


同樣,如其他答案所指出的,請記住數字可以是多位數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM