2013-01-19 103 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