Java 在字符串之间匹配多个数字,处理它们并替换

Java 在字符串之间匹配多个数字,处理它们并替换,java,regex,pattern-matching,Java,Regex,Pattern Matching,我有一个字符串,其中包含多个数字,必须在同一字符串中再次处理和替换这些数字 例如: 假设我有: my name is anusha, I am a noob in Java having reputation: 3647 haha I am just kidding my actual reputation is 0001 现在让我们假设我想提取3647,然后对它进行乘法、除法或加法。让我们除以3647/100=36.47,替换为与0001相同的字符串中的原始数字,并替换为00.01 结果字符

我有一个字符串,其中包含多个数字,必须在同一字符串中再次处理和替换这些数字

例如:

假设我有:

my name is anusha, I am a noob in Java having reputation: 3647 haha I am just kidding my actual reputation is 0001
现在让我们假设我想提取3647,然后对它进行乘法、除法或加法。让我们除以3647/100=36.47,替换为与0001相同的字符串中的原始数字,并替换为00.01

结果字符串应为:

my name is anusha, I am a noob in Java having reputation: 36.47 haha I am just kidding my actual reputation is 00.01
谢谢你的帮助。我知道这对很多人来说是愚蠢的,但我仍在学习

我试着做:

Pattern intsOnly = Pattern.compile("\\d+");
    Matcher makeMatch = intsOnly.matcher("my name is anusha, I am a noob in Java having reputation: 3647 haha I am just kidding my actual reputation is 0001");
    makeMatch.find();
    String inputInt = makeMatch.group();
    System.out.println(inputInt);
但很明显,它只拾取第一个数字,因为我没有使用循环,而且我也不确定如何处理这个数字

  • 使用空格键将字符串拆分为单词数组
  • 检查每个单词的数字是否正确
  • 如果是一个数字,则设置一个标志,并在标志的基础上应用您的逻辑 应用逻辑后,将单词替换到数组中
  • 根据您的要求,将整个数组打印为字符串或连接

  • 使用
    模式
    匹配器
    可以找到数字的位置

    Pattern pattern = Pattern.compile("\\d+");
    Matcher matcher = pattern.matcher(yourStringGoesHere);
    
    while (matcher.find()) {
        System.out.print("Start index: " + matcher.start());
        System.out.print(" End index: " + matcher.end() + " ");
        System.out.println(matcher.group());
    }
    
    那你就可以用了。

    我找到了

    抱歉英语:/

    试试这个:

        final String regex = "\\d+";
        String string = "my name is anusha, I am a noob in Java having reputation: 3647 haha I am just kidding my actual reputation is 0001";
        NumberFormat formatter = new DecimalFormat("00.00");     
    
        final Pattern pattern = Pattern.compile(regex);
        final Matcher matcher = pattern.matcher(string);
    
        while (matcher.find()) {
            Float val=new Float(matcher.group(0));
            val=val/100;
            string=string.replace(matcher.group(0),formatter.format(val));
        }
        System.out.println(string);
    
    }
    
    输出:

    my name is anusha, I am a noob in Java having reputation: 36.47 haha I am just kidding my actual reputation is 00.01
    

    你试过什么了吗?请看。告诉我们你已经尝试了什么,什么不起作用。是的,明白了。在问题中添加了我的试验。谢谢谢谢你的快速回复。我尝试了您提供的逻辑,它对大多数情况下都很好,但对于一些数字,例如10034打印为100.0000.00.34等。与此同时,我试图理解您的代码,只是想通知您。谢谢你的帮助。它应该打印成100.34,就像我刚才试过的那样。。。你需要给我一个更大的样品有这样的东西。。还有一件事,这些数字会用空格分隔吗?Space10034这样的空间?在我的正则表达式中,没有捕获组。。。我所做的就是匹配数字。。。。组(0)匹配整个正则表达式。。。在这种情况下,只有数字。。。我想知道的是,如果你使用了我的格式“00.00”,那么你怎么会得到“100.0000.00.34”“结果。。这将有助于你给我完整的样本字符串,你已经尝试了代码是的,他们将被分隔的空间。我正在尝试阅读stackoverflow.com/questions/16517689/…以了解目前模式匹配中的组,我也很兴奋。我使用的示例是:[报告单次填充限制]客户:270009235,来自合作伙伴:EM\u钱包,填充:8001美分,超过了允许的单次填充限制:8000。因此,我在regex的“\\d+”前后添加了空格,它成功了。
    my name is anusha, I am a noob in Java having reputation: 36.47 haha I am just kidding my actual reputation is 00.01