2013-01-19 113 views
2

可能重複:
Matching a 「.」 in java的Java分割字符串使用分隔符

我有一個字符串1.2.4我想分裂,並得到2將它與另一個字符串,我得到的比較。

我嘗試做以下

StringTokenizer old_ver = new StringTokenizer(oldVersion, "."); 
    int oldVer = Integer.parseInt(old_ver.nextToken()); 
    oldVer = Integer.parseInt(old_ver.nextToken()); 

    StringTokenizer new_ver = new StringTokenizer(newVersion, "."); 
    int newVer = Integer.parseInt(new_ver.nextToken()); 
    newVer = Integer.parseInt(new_ver.nextToken()); 

    if (oldVer == newVer) { 
     return true; 
    } 

有沒有更好的辦法做到這一點使用.Split()

+0

_better_ as in? – Swapnil

+1

雖然你*可以*使用'split',我個人會使用Guava的'Splitter'類。 –

+0

@Swapnil性能明智 –

回答

1

在您的代碼中,1.2.1與3.2.0「兼容」,無論您是否使用String.split,這看起來都是嚴重問題。此外,您不需要將版本號解析爲整數,因爲您只比較平等。

StringTokenizer old_ver = new StringTokenizer(oldVersion, "."); 
StringTokenizer new_ver = new StringTokenizer(newVersion, "."); 
return (old_ver.nextToken().equals(new_ver.nextToken() && 
     old_ver.nextToken().equals(new_ver.nextToken()); 

,你一定能做到與String.split還有:

String [] oldV = String.split(oldVersion,"\\."); 
    String [] newV = String.split(newVersion,"\\."); 

    return oldV[0].equals(newV[0]) && oldV[1].equals(newV[1]); 

String.split()版本似乎略短,但但對我來說,它看起來有點困難,因爲閱讀:

  • 它涉及額外的思考步驟點(。)是一個保留字符,必須轉義。
  • 「下一個元素,然後是下一個元素」似乎比「位置0處的元素和位置1處的元素」的思維努力少。

有些版本比較器可能會付出代價,比較版本號的主要版本,然後是中間版本,然後是次要版本號碼,這樣我們就可以進行「1.2.4或更高版本」測試。

+0

哇我沒有想到該版本的變化:P任何想法如何處理這個 - http://stackoverflow.com/questions/14361586/android-pushing-updates-on-play-store –

6

的problemis,在正則表達式「」是一個單獨的角色。因此,你需要使用 「\\.

同樣逃避它,你可以使用

string.split("\\."); 

編輯:

split()String類的方法使用PatternMatcher內部這是正常的用於Java中Regex的API。

所以沒有問題與split