2

我有一个如下所示的小代码片段,如您所见,它有一个用于检查服务器版本的硬编码值。现在我的意图是,如果服务器版本是 11.3.0 或更高版本,那么应该输入 if,但我无法想出办法,Integer.parseInt我猜我不会工作,因为我解析 int 而不是 float。

String serverVersion = DatamodelVersion.getInstance().getVersion();
if(serverVersion.equalsIgnoreCase("11.3.0"))
{
    outstr = new FileOutputStream(confFile);
    prop.setProperty("NTFSDriver", "11.3.0/x86/tntfs.ko");
    prop.setProperty("NTFSDriver_x64", "11.3.0/x86_64/tntfs.ko");

    prop.store(outstr, "");

    update = true;
    System.out.println("Updated the tuxera conf file successfully");
    logger.logDebugAlways("Updated the tuxera conf file successfully");

}
4

8 回答 8

4

尝试这个

String serverVersion = DatamodelVersion.getInstance().getVersion();
String[] version = serverVersion.split("\\.");
if (Integer.parseInt(version[0]) > 11 || (Integer.parseInt(version[0]) == 11 && Integer.parseInt(version[1]) >= 3))
{
    outstr = new FileOutputStream(confFile);
    prop.setProperty("NTFSDriver", "11.3.0/x86/tntfs.ko");
    prop.setProperty("NTFSDriver_x64", "11.3.0/x86_64/tntfs.ko");

    prop.store(outstr, "");

    update = true;
    System.out.println("Updated the tuxera conf file successfully");
    logger.logDebugAlways("Updated the tuxera conf file successfully");
}
于 2012-12-21T10:30:18.393 回答
1

您可以尝试将数字分成 3 部分,如下所示:

String[] bits = serverVersion.split(".");

然后,使用 for 循环并Integer.parseInt解析数字的每个部分,并进行比较。

于 2012-12-21T10:30:08.277 回答
1

Java 中没有内置函数可以转换11.3.0为浮点数,因为11.3.0它不是有效的浮点数。

对于包含有效浮点数的字符串,您可以Float.valueOf在 Java 中使用。

于 2012-12-21T10:25:26.353 回答
1

用“.”分割版本号

然后与您的参考数据一一比较。

String serverVersion = DatamodelVersion.getInstance().getVersion();
serverVersion.split('.')[0] // and so on..
于 2012-12-21T10:28:40.137 回答
1

版本号既不是整数也不是浮点数。您最好的选择是使用专门的课程:

public class Version implements Comparable<Version> {

  public Version(int major, int minor, int revision) {
    // set fields
  }

  public int compareTo(Version other) {
    // compare major minor and revision
  }

  public boolean equals(Object other) {
    // code here
  }      

  // parse a version in X.Y.Z form
  static Version parse(String version) {
    return new Version(//...);
  }
}

使用它,您可能会决定稍后添加对 1.3.4-ALPHA 或 -RC1 等版本的支持。

于 2012-12-21T10:29:32.680 回答
0

11.3.0 不是浮点数。如何改用以下代码:

int Compare(String ver1, String ver2)
{
String[] ver1s = ver1.Split("\.");
String[] ver2s = ver2.Split("\.");
if(ver1s.length > ver2.length) return 1;
if(ver2s.length > ver1.length) return -1;
for(int i = 0;i < ver1s.length;i++)
{
   if(Integer.valueOf(ver1s[i]) > Integer.valueOf(ver2s[i])) return 1;
   if(Integer.valueOf(ver2s[i]) > Integer.valueOf(ver1s[i])) return -1;
}
return 0;
}
于 2012-12-21T10:32:03.210 回答
0

您需要根据这些数字在您的域中必须遵循的规则定义自己的检查版本号的方法。

根据您提供的信息,我会分别对每个值(作为整数)进行字符串拆分.和比较。1130

于 2012-12-21T10:28:11.600 回答
0

你在这里有一Version堂课:http: //nvn.svn.sourceforge.net

应该这样使用

Version v = Version.parse(DatamodelVersion.getInstance().getVersion());

并以标准格式 MAJOR.MINOR.BUILD.REVISION 存储数字

于 2012-12-21T10:29:55.820 回答