在Java中,如何将字符串解析为浮点并比较值?

在Java中,如何将字符串解析为浮点并比较值?,java,string-parsing,Java,String Parsing,我有一个小代码段,如下所示,您可以看到它有一个硬编码值,用于检查服务器版本。 现在我的意图是,如果服务器版本是11.3.0或更高版本,那么应该输入if,但我无法找到一种方法,Integer.parseInt将不起作用,因为我解析int not float String serverVersion = DatamodelVersion.getInstance().getVersion(); if(serverVersion.equalsIgnoreCase("11.3.0")) { out

我有一个小代码段,如下所示,您可以看到它有一个硬编码值,用于检查服务器版本。 现在我的意图是,如果服务器版本是11.3.0或更高版本,那么应该输入if,但我无法找到一种方法,
Integer.parseInt
将不起作用,因为我解析int not 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");

}

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


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

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


根据您提供的信息,我将在
上进行字符串拆分,并依次将每个值(作为整数)与
11
3
0
进行比较。

将版本号拆分为“”

然后逐一与参考数据进行比较

String serverVersion = DatamodelVersion.getInstance().getVersion();
serverVersion.split('.')[0] // and so on..

版本号既不是整数,也不是浮点。您最好使用一个专门的类:

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(//...);
  }
}
公共类版本实现了可比较的{
公共版本(整数大调、整数小调、整数修订版){
//设置字段
}
公共整数比较(其他版本){
//比较主要和次要版本
}
公共布尔等于(对象其他){
//代码在这里
}      
//以X.Y.Z形式解析版本
静态版本解析(字符串版本){
返回新版本(//…);
}
}

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

您有一个
版本
类:

应该这样使用

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

并以标准格式MAJOR.MINOR.BUILD.REVISION存储数字。您可以尝试将数字拆分为3部分,如下所示:

String[] bits = serverVersion.split(".");
然后,使用for循环和
Integer.parseInt来解析数字的每个部分,并比较每个部分。

试试这个

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");
}

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;
}
int比较(字符串ver1,字符串ver2)
{
字符串[]ver1s=ver1.Split(“\”);
字符串[]ver2s=ver2.Split(“\”);
如果(ver1s.length>ver2.length)返回1;
if(ver2s.length>ver1.length)返回-1;
for(int i=0;iInteger.valueOf(ver2s[i])返回1;
if(Integer.valueOf(ver2s[i])>Integer.valueOf(ver1s[i])返回-1;
}
返回0;
}

这样对待它:它不是一个数字,而是三个数字。这会使问题更容易解决吗?应该是这样。
11.3.0
也不是浮点。@Gimby:好吧,把它当作11.3而不是11.3,这使问题更难解决:(版本号不能用浮点来准确表示。(事实上,很少东西能用浮点来准确表示,但那是另一回事。)像这样的版本号应该被视为定义了简单字典顺序的整数列表。可能重复的
Integer.parseInt(版本[0])>11 | |(Integer.parseInt(版本[0])==13&&Integer.parseInt(版本[1])>=3)
为什么是13?应该是11,对吗?@kingsmasher1是的,对不起,应该是11,这是一个好答案,事实上也是一个简单的答案。谢谢:)