我想創建一個方法,在特定字串之后將字串值轉換為雙精度值。
例如:
String text1 = "--generalus! -maximus? --petrus 23 --param 123.456";
我正在搜索param出現后的值。如果沒有param -word,我必須回傳一個. 我試圖將字串拆分為一個陣列以使用索引,但是-method 不起作用......你能幫我嗎?Double.NaNparseDouble
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;
}
uj5u.com熱心網友回復:
您可以使用正則運算式。Find--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
uj5u.com熱心網友回復:
如果您比較“--param”而不是“param”,它將起作用。
uj5u.com熱心網友回復:
可能需要使用第 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
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/354814.html
上一篇:用公共前綴區分規則
下一篇:關于樹莓派64位作業系統
