如何在特定关键字后将字符串转换为 double?

How can I convert a string into a double after a specific key word?

我想创建一个方法,在 特定字符串之后将字符串值转换为双精度值
例如:
String text1 = "--generalus! -maximus? --petrus 23 --param 123.456";
我正在搜索 一词 param 出现后的值。如果没有param-word,我只好return一个Double.NaN。 我试图将字符串拆分为一个数组以使用索引,但 parseDouble 方法不起作用... 你能帮帮我吗?

    public double parseParam(String text) {
        String[] arr = text.split("\s");
        String param = "param";
        for (int i = 0; i < arr.length;i++){
            System.out.println(arr[i]); //just for me to show whats going on
            if(arr[i].equals(param)){
                return Double.parseDouble(arr[i+1]); 
            }
        }
        return Double.NaN;
    }

您可以使用 正则表达式 。查找 --param 后跟一个或多个空格,然后是一个浮点值。将该值分组。然后解析它(如果找到的话)。喜欢,

String text1 = "--generalus! -maximus? --petrus  23 --param 123.456";
Pattern p = Pattern.compile("--param\s+([+-]?\d*([.]?\d+))");
Matcher m = p.matcher(text1);
double val = Double.NaN;
if (m.find()) {
    val = Double.parseDouble(m.group(1));
}
System.out.println(val);

产出

123.456

可能需要使用第 3 方库(例如 Apache Commons CLI)解析输入字符串中类似于命令行选项的所有参数,或者可以构建键值对映射并可以通过参数名称从地图中检索相关参数:

String text1 = "--generalus! -maximus? --petrus  23 --param 123.456";
Map<String, String> map = Arrays.stream(text1.split("[\-]+")) // Stream<String>
      .filter(s -> s != null && !s.trim().isEmpty()) // remove blanks
      .map(pair -> pair.split("\s+")) // Stream<String[]> pairs
      .collect(Collectors.toMap(
          p -> p[0],
          p -> p.length > 1 ? p[1] : ""
      ));
System.out.println(map);
// available parameter
System.out.println(Double.parseDouble(map.getOrDefault("param", "NaN")));
// missing parameter
System.out.println(Double.parseDouble(map.getOrDefault("param1", "NaN")));

输出:

{maximus?=, petrus=23, param=123.456, generalus!=}
123.456
NaN

如果您比较“--param”而不是“param”,它将起作用。