如何拆分数字和符号 JAVA



我需要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);
}

这个问题有很多部分。

  1. 获取数据
  2. 从数据中解析各个项目
  3. 将项目转换为可用数字

您已经使用 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.splitStream实用程序的组合在表达式中列出值:

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

注意::请忽略我使用电话输入的任何格式错误或拼写错误

最新更新