我需要Java方面的帮助。因为我在一行中有这样的字符 1.11 € 1.10 € 1.02 € 0.66 € 0.50,我需要将这些字符添加到单独的变量中,例如双精度 i = 1.11 双精度 a = 1.10 等等。
try {
final Document document = Jsoup.connect("http://www.jozita.lt/").get();
Elements ele = document.select("div#fuel_price_table_silale_1");
final String title = ele.select("td.price").text();
System.out.println(title);
} catch (IOException ex) {
Logger.getLogger(App.class.getName()).log(Level.SEVERE, null, ex);
}
这个问题有很多部分。
- 获取数据
- 从数据中解析各个项目
- 将项目转换为可用数字
您已经使用 JSoup 完成了第一部分。
其次,使用 String.split(( 解析 JSoup 响应中的值。
String[] values = title.split("€");
最后,将值转换为 double
s 更具挑战性,因为数字格式(带逗号(不会被 Double.valueOf()
解析。相反,我们需要使用NumberFormat
,并使用它解析字符串。
NumberFormat format = NumberFormat.getInstance(ITALY); // Italy chosen as it uses the comma format
Number number = format.parse(value.trim());
Double d = number.doubleValue();
因此,将它们放在一起可以得到:
String[] values = title.split("€");
List<Double> doubles = new ArrayList<>();
NumberFormat format = NumberFormat.getInstance(ITALY);
for (String s : values) {
Number number = format.parse(s.trim());
doubles.add(number.doubleValue());
}
System.out.println(doubles);
输出[1.11, 1.1, 1.02, 0.66, 0.5]
.
您可以使用String.split
和Stream
实用程序的组合在表达式中列出值:
List<Double> values = Arrays.stream(str.split("€")) // get a String[] and then a Stream<String>
.map(Double::valueOf) // cast every value to double
.collect(Collectors.toList()); // get a list of the double values
编辑
如@AjahnCharles所示,我们本可以使用map(Double::p arseDouble(,但它返回一个原始double
,因此会有一些开销来获得Stream<Double>
。阅读此内容以了解差异。
我可以在拆分和转换部分为您提供帮助,我不建议为每个项目/值创建一个新变量是个好主意。最好将其保存在列表中。
String data = "1.11 € 1.10 € 1.02 € 0.66 € 0.50";
List<> dataList = new ArrayList<>();
//Splitting based on key
dataList = data.split("€");
for(int i=0;i<dataList.size();i++){
//Data is stored in a list in string format.
double d = Double.parseDouble( dataList[i]);
System.out.println(d);
}
注意::请忽略我使用电话输入的任何格式错误或拼写错误