Java分裂字符串使用分隔符

时间:2013-01-19 10:47:43

标签: java android split stringtokenizer

  

可能重复:
  Matching a “.” in 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()

有更好的方法吗?

2 个答案:

答案 0 :(得分:6)

问题在于正则表达式“。”是一个单一的角色。因此,您需要使用“\\.

来转义它

同样,您可以使用

string.split("\\.");

修改

split()类的

String方法在内部使用PatternMatcher,这通常是Java中用于Regex的API。

因此split没有问题。

答案 1 :(得分: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或更高版本”测试的方式。