Java如何从字符串中提取浮点数并单独显示

Java如何从字符串中提取浮点数并单独显示,java,string,Java,String,我有一个字符串,我想提取其中的浮动。我已经使用matcher.group()函数成功地完成了这项工作,但我只想单独显示它们。这是我的密码 String regex="([0-9]+[.][0-9]+)"; String input= "You have bought USD 1.00 Whatsapp for 784024487. Your new wallet balance is USD 1.04. Happy Birthday EcoCash for turning 7years. Liv

我有一个字符串,我想提取其中的浮动。我已经使用matcher.group()函数成功地完成了这项工作,但我只想单独显示它们。这是我的密码

String regex="([0-9]+[.][0-9]+)";
String input= "You have bought USD 1.00 Whatsapp for 784024487. Your new wallet balance is USD 1.04. Happy Birthday EcoCash for turning 7years. Live Life the EcoCash Way.";

Pattern pattern=Pattern.compile(regex);
Matcher matcher=pattern.matcher(input);

while(matcher.find())
  {
System.out.println("First float is "+matcher.group());
  }
}
我得到的答案是: 第一个浮点数是1.00 第一个浮点数是1.04

但我想说: 第一个浮点数是1.00 第二个浮点数是1.04


我该怎么做呢?

大概是这样吧

int k = 1;
while(matcher.find())
{
   System.out.println("Float " + k + " is "+matcher.group());
   k++;
}

这将输出如下内容:Float 1是1.00 Float 2是1.04

您需要在循环中有一个计数器,并基于计数器写入输出正确的字。而是从显示诸如“Float#n is:xxx”之类的内容开始,而不是显示单词…

使用以下方法将数字转换为顺序形式,然后使用它来显示

public static String ordinal(int i) {
        String[] suffixes = new String[]{"th", "st", "nd", "rd", "th", "th", "th", "th", "th", "th"};
        switch (i % 100) {
            case 11:
            case 12:
            case 13:
                return i + "th";
            default:
                return i + suffixes[i % 10];

        }
 }

public static void main(String[] args) {
        String regex = "([0-9]+[.][0-9]+)";
        String input = "You have bought USD 1.00 Whatsapp for 784024487. Your new wallet balance is USD 1.04. Happy Birthday EcoCash for turning 7years. Live Life the EcoCash Way.";
        Pattern pattern = Pattern.compile(regex);
        Matcher matcher = pattern.matcher(input);
        int number = 1;
        while (matcher.find()) {
            System.out.println(ordinal(number++) + " float is " + matcher.group());
        }
}

您可以编写一个返回后缀的方法,如
st
nd
rd
,并在代码中使用它,例如:

private static String getPostFix(int number) {
    if(number % 10 == 1) {
        return "st";
    } else if(number % 2 == 0) {
        return "nd";
    } else if(number % 3 == 0) {
        return "rd";
    } else {
        return "th";
    }
}
守则是:

String regex="([0-9]+[.][0-9]+)";
String input= "You have bought USD 1.00 Whatsapp for 784024487. Your new wallet balance is USD 1.04. Happy Birthday EcoCash for turning 7years. Live Life the EcoCash Way.";

Pattern pattern=Pattern.compile(regex);
Matcher matcher=pattern.matcher(input);

int i=0;
while(matcher.find()){
    System.out.println((++i) + getPostFix(i) + " Float is :" + matcher.group());
}

您正在使用
System.out.println(“第一个浮点值是”+matcher.group())
块中的
第一个
硬编码。这不是一个正则表达式问题,因此删除了
regex
标记。前面已经回答过:甚至更短:
System.out.println(“Float”+(k++)+是“+matcher.group()”