2015-05-26 81 views
0

好的,所以我的問題是我想能夠解析一個字符串並拆分它,保留一些分隔符和刪除其他分隔符。分割一個字符串,刪除一些分隔符,但保留其他

假設我的輸入字符串是1.8.0a。我希望能夠將字符串放入數組中, [1, 8, 0, a]。我見過other SO questions,最好的答案是接近我想要的。我當前的代碼是:

String[] array = s.split("[-._[?<=a[b[r]]]]"); 

唯一的問題是,我的輸出是

[1, 8, 0] 

編輯:

下面是一些例子:

輸入:1.18.0a

輸出:[1, 18, 0]

預期輸出:[1, 18, 0, a]

輸入:1.22.0r

輸出:[1, 22, 0]

預期輸出:[1, 22, 0, r]

另外,我用括號,

String[] array = s.split("[-._(?<=a[b[r]])]"); 

仍然沒有一個韋爾。

+1

你必須再舉幾個例子才能得到一個好的答案。例如,「1.18.0a」和「1.8.10a」的輸出是什麼? – dcsohl

+0

還要記住,您鏈接的另一個問題使用了lookarounds,並且該語法帶有括號。你錯過了括號,所以這可能是你的問題。 '(?<= x)'是一個向後看,但沒有括號它不會做你想做的。 – dcsohl

回答

0

它看起來像你想在-._

  • 或數字與字母之間的分裂

    在這種情況下,你可以用

    yourText.split("[-._]|(?<=[0-9])(?=[a-zA-Z])") 
    
  • +0

    解決!非常感謝!! –

    0

    如果你只是想處理這樣的版本字符串,我個人只是逐字地逐個字符串,將字符複製到StringBuilder中,直到達到分隔符,然後將StringBuilder轉換爲字符串並將其存儲在陣列。這將允許我考慮將數字切換爲字母作爲「分隔符」。

    但是,我發現正則表達式很不透明。它們在某些情況下很有用,但有時使用簡單的Java代碼,但更爲詳細,更簡單易懂。

    0

    嘗試你可以使用下面的正則表達式:

    String[] array = s.split("[-._]|(?=[abr])"); 
    

    Ideone Demo

    輸出:

    [1, 18, 0, a]   //for input = "1.18.0a" 
    
    相關問題