Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.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,我有这样的输入==> 2本12.99的书 3.99的4片薯片 我想从每一行中提取数值,并将它们存储在变量中 例如在这行中。。2本12.99的书我想提取quntity=2和Price=12.99 从给定字符串中,您可以使用: Pattern p = Pattern.compile("(\\d+)\\D+(\\d+(?:.\\d+)?)"); Matcher mr = p.matcher("4 potato chips at 3.99"); if (mr.find()) { System.o

我有这样的输入==>
2本12.99的书
3.99的4片薯片

我想从每一行中提取数值,并将它们存储在变量中 例如在这行中。。2本12.99的书我想提取quntity=2和Price=12.99 从给定字符串中,您可以使用:

Pattern p = Pattern.compile("(\\d+)\\D+(\\d+(?:.\\d+)?)");
Matcher mr = p.matcher("4 potato chips at 3.99");
if (mr.find()) {
    System.out.println( mr.group(1) + " :: " + mr.group(2) );
}
输出:

4::3.99

您可以使用:

Pattern p = Pattern.compile("(\\d+)\\D+(\\d+(?:.\\d+)?)");
Matcher mr = p.matcher("4 potato chips at 3.99");
if (mr.find()) {
    System.out.println( mr.group(1) + " :: " + mr.group(2) );
}
输出:

4::3.99

Regex


描述 捕获组1:包含数量

捕获组2:包含金额


JAVA
试试看{
Pattern regex=Pattern.compile((\\d+[^\\d]+([+-]?[0-9]{1,3}(?:,?[0-9]{3})*(?:\\\.[0-9]{2})”,Pattern.CASE不区分大小写| Pattern.UNICODE\u大小写);
Matcher regexMatcher=regex.Matcher(subjectString);
while(regexMatcher.find()){
对于(int i=1;i正则表达式)


描述 捕获组1:包含数量

捕获组2:包含金额


JAVA
试试看{
Pattern regex=Pattern.compile((\\d+[^\\d]+([+-]?[0-9]{1,3}(?:,?[0-9]{3})*(?:\\\.[0-9]{2})”,Pattern.CASE不区分大小写| Pattern.UNICODE\u大小写);
Matcher regexMatcher=regex.Matcher(subjectString);
while(regexMatcher.find()){
对于(int i=1;i您可以使用类。下面是工作示例:

MessageFormat f = new MessageFormat("{0,number,#.##} {2} at {1,number,#.##}");
try {
    Object[] result = f.parse("4 potato chips at 3.99");
    System.out.print(result[0]+ ":" + (result[1]));
} catch (ParseException ex) {
    // handle parse error
}
您可以使用类。下面是工作示例:

MessageFormat f = new MessageFormat("{0,number,#.##} {2} at {1,number,#.##}");
try {
    Object[] result = f.parse("4 potato chips at 3.99");
    System.out.print(result[0]+ ":" + (result[1]));
} catch (ParseException ex) {
    // handle parse error
}

这可能是相关的:对于分析整数、长整数、浮点数、双精度数等,请使用
Long.parseLong(String s)
和等长数。此外,要获得仅包含数字的两个字符串,您可以尝试
String.split(\\D+));//可能需要是一个*
这可能是相关的:对于分析整数、长整数、浮点数、双精度数等,请使用
Long.parseLong(String s)
和等长数。另外,要得到两个只包含数字的字符串,可以尝试
String.split(\\D+));//可能需要是一个*
Hi Anubhava..非常感谢.但在输出中,小数部分被视为一个单独的数字..这就是输入和输出的样子这是输入1本书的输出12.99土豆片3.99它跳过了数量是12.0价格是99.0数量是3.0价格是99.0根据你在input你只有1个项目的数量和价格。你不能将芯片和书籍的输入传递给这个正则表达式。不,实际上我是在循环中这样做的。问题是,它不是把数量取为1,价格取为12.99。它跳过了1,把数量取为12.0,把小数部分取为.99,把价格=99.0…所以基本上它跳过了数量and取价格的小数部分和小数部分。好的,你能在你的问题中发布你的代码来重现这个问题吗?这对我来说很容易理解和解决。Matcher mr=null;String Quantity=tokens[i];QuantityItem=Quantity.split(del);for(int j=0;jHi Anubhava.非常感谢,但在输出中,小数部分被视为一个单独的数字输入和输出是这样的这是输入的输出1本书的12.99分1薯片的3.99分它跳过了数量是12.0分价格是99.0分数量是3.0分价格是99.0根据你的输入示例,你只有1个item数量和价格。你不能将芯片和书籍的输入传递给这个正则表达式。不,实际上我是在循环中这样做的。问题是,它不是把数量取为1,把价格取为12.99。,它跳过1,把数量取为12.0,把小数部分取为99,把价格=99.0。,所以基本上它是跳过数量,取小数和f价格的分数部分代替了OK你能在你的问题中发布你的代码来重现这个问题吗?这对我来说很容易理解和解决。Matcher mr=null;String Quantity=tokens[i];QuantityItem=Quantity.split(del);for(int j=0;jj这不是只有在数字小于10美元时才有效吗?或者Java能处理这个问题吗?更多的是个人问题是的,提供的示例只在小于10美元时有效,但是如果您将“{1,number,#.#}”更改为{1,number}或{1,number,############.#####它将非常有效。所有可能格式类型的综合文档(例如number)或者格式样式(例如###########可以在类“javadoc”中找到。您可以选择适合您特定情况的任何格式匹配属性。这不是只有在数字小于$10时才起作用吗?还是Java可以处理这一问题?更多的是个人查询是的,提供的示例只在少于$10时起作用,但是如果您更改“{1,number,#####使用{1,number}或{1,number,######################################!!!!!。
MessageFormat f = new MessageFormat("{0,number,#.##} {2} at {1,number,#.##}");
try {
    Object[] result = f.parse("4 potato chips at 3.99");
    System.out.print(result[0]+ ":" + (result[1]));
} catch (ParseException ex) {
    // handle parse error
}