可能重复:
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()
答案 0 :(得分:6)
问题在于正则表达式“。”是一个单一的角色。因此,您需要使用“\\.
”
同样,您可以使用
string.split("\\.");
修改强>
split()
类的 String
方法在内部使用Pattern
和Matcher
,这通常是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()
版似乎略短,但对我而言,它看起来稍微难以阅读,因为:
有一些版本比较器首先比较版本号的主要版本,然后是中间版本,然后是版本编号的次要部分,这可能是我们可以进行“1.2.4或更高版本”测试的方式。