Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何从格式化价格中提取价值?_Java_Regex - Fatal编程技术网

Java 如何从格式化价格中提取价值?

Java 如何从格式化价格中提取价值?,java,regex,Java,Regex,我想要一个java正则表达式,它从价格中提取价值。例如,40250.99美元 我希望表达式输出40250.99。关键的一点是,它只能用正则表达式来完成。我无法执行任何字符串连接或其他与字符串相关的操作。我试过以下方法,但“打乱了一切”。基本上,503.34美元的收益率为503.34美元,但40250.99美元的收益率为40美元 String extractionPattern = "[\\$](\\d+(?:\\.\\d{1,2})?)"; String val = " Executive

我想要一个java正则表达式,它从价格中提取价值。例如,40250.99美元 我希望表达式输出40250.99。关键的一点是,它只能用正则表达式来完成。我无法执行任何字符串连接或其他与字符串相关的操作。我试过以下方法,但“打乱了一切”。基本上,503.34美元的收益率为503.34美元,但40250.99美元的收益率为40美元

String extractionPattern = "[\\$](\\d+(?:\\.\\d{1,2})?)";
String val = "    Executive billings @ $40,250.99 Starting 2013-01-05 with bi weekly";
Pattern  p = Pattern.compile(extractionPattern);
Matcher m = p.matcher(val);
if (m.find())
     System.out.println("Found a match:" + m.group(1));

也许有更好的方法可以做到这一点,我将是第一个承认我的正则表达式是非常基本的

String regExp = "\\$[0-9,\\.]+";
String value = "Executive billings @ $40,250.99 Starting 2013-01-05 with bi weekly";

Pattern pattern = Pattern.compile(regExp);
Matcher matcher = pattern.matcher(value);

// This should result in a list with 1 element of "$40,250.99"
List<String> lstMatches = new ArrayList<String>(5);
while (matcher.find()) {
    lstMatches.add(matcher.group());
}

for (String match : lstMatches) {
    // Strip off the unrqeuired elements...
    match = match.replaceAll("\\$", "");
    match = match.replaceAll(",", "");
    System.out.println(Double.parseDouble(match));
}
String regExp=“\\$[0-9,\\.]+”;
String value=“从2013-01-05开始,每两周支付一次高管账单@40250.99美元”;
Pattern=Pattern.compile(regExp);
Matcher Matcher=pattern.Matcher(值);
//这将产生一个包含1个元素“$40250.99”的列表
List lstMatches=newarraylist(5);
while(matcher.find()){
lstMatches.add(matcher.group());
}
for(字符串匹配:lstMatches){
//剥去未经修饰的元素。。。
match=match.replaceAll(“\\$”,“”);
match=match.replaceAll(“,”和“”);
System.out.println(Double.parseDouble(match));
}

您甚至可以使用
NumberFormat.getCurrencyInstance().parse(match)
将结果解析回
double
,但这将假定输入符合本地要求…

您可以使用
replace
replaceAll
方法吗?仅仅是因为你说我不能做任何字符串连接而询问,尽管你在
中使用了它,但还是找到了一个匹配项:“+m.group(1)
。如果没有,那么您的问题可能无法用正则表达式解决,因为它无法在一个匹配中返回几个单独的子字符串,因此您将无法删除逗号。请确认:您的示例中是否有输入错误,或者您确实想从
$40250.99
中删除逗号,并将其设置为
40250.99
?如果您不必删除它,请尝试此
“\\$(\\d+(?:,\\d+*(?:\\.\\d{1,2})”
regex。感谢您的回复,但我无法执行任何replaceAll或任何其他字符串操作。这用于第三方系统,该系统将正则表达式作为其命令之一的参数,并提取值。我希望我能访问Java,但我没有。因此,我需要一个提取值的正则表达式。谢谢大家的帮助。