Java 在每个'&书信电报;br>'-标签

Java 在每个'&书信电报;br>'-标签,java,regex,oop,math,Java,Regex,Oop,Math,我有一个字符串,它是: <p>1+: €0,09756<br>3.001+: €0,09338<br> 30.001+: €0,09338<br>150.001+: €0,09338<br> 750.001+: €0,09338<br> </p> 整数被去除所有特殊字符,浮点也被去除。货币符号将被忽略。如果下一行的价格与文章之前的价格相同,则不会执行addPrice 最有效的方法是什么?使用下面的正则表达式怎么

我有一个字符串,它是:

<p>1+: €0,09756<br>3.001+: €0,09338<br>
30.001+: €0,09338<br>150.001+: €0,09338<br>
750.001+: €0,09338<br>
</p>
整数被去除所有特殊字符,浮点也被去除。货币符号将被忽略。如果下一行的价格与
文章之前的价格相同,则不会执行addPrice


最有效的方法是什么?

使用下面的正则表达式怎么样

(\d+(,\d+)?)\+: €(\d+(,\d+)?(\.\d+)?)
编辑(abhusava提供):

String str=“1+:€0.09756
3001+:€0.09338
\n”+ “30001+:€0.09338
150001+:€0.09338
750001+:€0.09338

”; Pattern pt=Pattern.compile(“(\\d+(,\\d+)\+)\+:€(\\d+(,\\d+)(\\.\\d+)); 匹配器m=点匹配器(str); 浮动价格=空; while(m.find()){ 整数数量=新整数(m.group(1).替换(“,”,”); 浮动价格=新浮动(m.group(3).替换(“,”,”)。替换(“,”,”)); //仅在与上次不同时添加价格 如果(!price.equals(lastPrice)) 第条附加价格(数量、价格); 最后价格=价格; }
使用下面的正则表达式怎么样

(\d+(,\d+)?)\+: €(\d+(,\d+)?(\.\d+)?)
编辑(abhusava提供):

String str=“1+:€0.09756
3001+:€0.09338
\n”+ “30001+:€0.09338
150001+:€0.09338
750001+:€0.09338

”; Pattern pt=Pattern.compile(“(\\d+(,\\d+)\+)\+:€(\\d+(,\\d+)(\\.\\d+)); 匹配器m=点匹配器(str); 浮动价格=空; while(m.find()){ 整数数量=新整数(m.group(1).替换(“,”,”); 浮动价格=新浮动(m.group(3).替换(“,”,”)。替换(“,”,”)); //仅在与上次不同时添加价格 如果(!price.equals(lastPrice)) 第条附加价格(数量、价格); 最后价格=价格; }
对于初学者,使用
s.split(
”)
拆分字符串。这将根据请求为您提供一个字符串数组。您还需要消除起始
。然后,您可以使用
split(\\+:€“)
拆分数组中的每个条目。这就给您留下了一个由两个元素组成的字符串数组,这些字符串可以解析为数字,除了逗号之外,您还需要将其替换为一个点:
s.replace(“,”,“)
。最后,使用
Integer.parseInt
Float.parseFloat

作为启动程序,使用
s.split(“
”)
拆分字符串。这将根据请求为您提供一个字符串数组。您还需要消除起始
。然后,您可以使用
split(\\+:€“)
拆分数组中的每个条目。这就给您留下了一个由两个元素组成的字符串数组,这些字符串可以解析为数字,除了逗号之外,您还需要将其替换为一个点:
s.replace(“,”,“)
。最后,使用
Integer.parseInt
Float.parseFloat

考虑以下代码:

String str = "<p>1+: €0,09756<br>3.001+: €0,09338<br>\n" + 
   "30.001+: €0,09338<br>150.001+: €0,09338<br>750.001+: €0,09338<br></p>";
Pattern pt = Pattern.compile("([^\\+]+)\\D+([\\d,]+)");
Matcher m = pt.matcher(str);
while(m.find()) {
    int quantity = Integer.parseInt(m.group(1).replaceAll("\\D+", ""));
    float price = Float.parseFloat(m.group(2).replace(',', '.'));
    System.out.printf("article.addPrice(new Integer(%d), new Float(%f));%n",
                       quantity, price);
}
考虑以下代码:

String str = "<p>1+: €0,09756<br>3.001+: €0,09338<br>\n" + 
   "30.001+: €0,09338<br>150.001+: €0,09338<br>750.001+: €0,09338<br></p>";
Pattern pt = Pattern.compile("([^\\+]+)\\D+([\\d,]+)");
Matcher m = pt.matcher(str);
while(m.find()) {
    int quantity = Integer.parseInt(m.group(1).replaceAll("\\D+", ""));
    float price = Float.parseFloat(m.group(2).replace(',', '.'));
    System.out.printf("article.addPrice(new Integer(%d), new Float(%f));%n",
                       quantity, price);
}

如何为每一行运行方法,如何访问这两个变量?这很好,除了将1+:€0.64974
51+:€0.53337
401+:€0.51051
2001+:€0.51051
10001+:€0.51051

转换为1:64974.0欧元//51:53337.0欧元//401:51051.0欧元//1:51051.0欧元//1:51051.0欧元之外,它将添加元素,即使前面的元素具有相同的属性price@JackMurphy至于稍微贵一点的价格,这取决于您的输入(点或逗号是用作千位分隔符还是小数点?)。修改replace(“SEPARATOR”、“NEWSEPARATOR”)语句以匹配。@JackMurphy很抱歉,我错过了与上一个元素比较的要点,我已经编辑了答案。请注意,当前答案仅与最后一个元素进行比较,因此如果价格不符合顺序,您可能会添加重复项。我将如何为每行运行该方法,以及如何访问这两个变量?这很好,除了将1+:€0.64974
51+:€0.53337
401+:€0.51051
2001+:€0.51051
10001+:€0.51051

转换为1:64974.0欧元//51:53337.0欧元//401:51051.0欧元//1:51051.0欧元//1:51051.0欧元之外,它将添加元素,即使前面的元素具有相同的属性price@JackMurphy至于稍微贵一点的价格,这取决于您的输入(点或逗号是用作千位分隔符还是小数点?)。修改replace(“SEPARATOR”、“NEWSEPARATOR”)语句以匹配。@JackMurphy很抱歉,我错过了与上一个元素比较的要点,我已经编辑了答案。请注意,当前答案仅与最后一个元素进行比较,因此如果价格不符合顺序,您可能会添加重复的答案。
article.addPrice(new Integer(1), new Float(0.09756));
article.addPrice(new Integer(3001), new Float(0.09338));
article.addPrice(new Integer(30001), new Float(0.09338));
article.addPrice(new Integer(150001), new Float(0.09338));
article.addPrice(new Integer(750001), new Float(0.09338));