2

可能重复:
匹配“.” 在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()

4

2 回答 2

6

问题在于正则表达式“。” 是单个字符。因此,您需要使用“ \\.”转义它

同样,您可以使用

string.split("\\.");

编辑:

split()类的方法在内部String使用PatternMatcher通常是 Java 中用于 Regex 的 API。

因此,使用 . 没有问题split

于 2013-01-19T10:50:13.393 回答
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 或更高版本”之类的测试一样。

于 2013-01-19T11:01:14.370 回答