📜  从给定字符串中提取最大数值 |第 2 组(正则表达式方法)

📅  最后修改于: 2022-05-13 01:57:07.465000             🧑  作者: Mango

从给定字符串中提取最大数值 |第 2 组(正则表达式方法)

给定一个字母数字字符串,从该字符串中提取最大数值。

例子:

Input : 100klh564abc365bg
Output : 564
Maximum numeric value among 100, 564 
and 365 is 564.
Input : abchsd0365sdhs
Output : 365

在 Set 1 中,我们讨论了从给定字符串中提取数值的一般方法。在这篇文章中,我们将讨论相同的正则表达式方法。

以下是至少一个数字的正则表达式之一。

\d+

所以正则表达式解决方案很简单:

  1. 初始化 MAX = 0
  2. 在匹配器上运行循环,每当找到匹配时,将数字字符串转换为整数并将其与 MAX 进行比较。
    • 如果 number 大于 MAX,则将 MAX 更新为 number。
  3. 最后返回 MAX。
// Java regex program to extract the maximum value
  
import java.util.regex.Matcher;
import java.util.regex.Pattern;
  
class GFG 
{
    // Method to extract the maximum value
    static int extractMaximum(String str)
    {
        // regular expression for atleast one numeric digit
        String regex = "\\d+";
          
        // compiling regex
        Pattern p = Pattern.compile(regex);
          
        // Matcher object
        Matcher m = p.matcher(str);
          
        // initialize MAX = 0
        int MAX = 0;
          
        // loop over matcher
        while(m.find())
        {
            // convert numeric string to integer
            int num = Integer.parseInt(m.group());
              
            // compare num with MAX, update MAX if num > MAX
            if(num > MAX)
                MAX = num;
        }
           
        return MAX;    
    }
  
    public static void main (String[] args)
    {
        String str = "100klh564abc365bg";
          
        System.out.println(extractMaximum(str));
    }
}

输出:

564

但如果数字大于整数范围,上述程序将不起作用。您可以尝试parseLong()方法来处理最长范围的数字。但是要处理大数字(大于范围)的情况,我们可以借助Java中的 BigInteger 类。下面是演示相同的Java程序。

// Java regex program to extract the maximum value
// in case of large numbers
  
import java.math.BigInteger;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
  
class GFG 
{
    // Method to extract the maximum value
    static BigInteger extractMaximum(String str)
    {
        // regular expression for atleast one numeric digit
        String regex = "\\d+";
          
        // compiling regex
        Pattern p = Pattern.compile(regex);
          
        // Matcher object
        Matcher m = p.matcher(str);
          
        // initialize MAX = 0
        BigInteger MAX = BigInteger.ZERO;
          
        // loop over matcher
        while(m.find())
        {
            // convert numeric string to BigIntegr
            BigInteger num = new BigInteger(m.group());
              
            // compare num with MAX, update MAX if num > MAX
            if(num.compareTo(MAX) > 0)
                MAX = num;
        }
           
        return MAX;    
    }
  
    public static void main (String[] args)
    {
        String str = "100klh564231315151313151315abc365bg";
          
        System.out.println(extractMaximum(str));
    }
}

输出:

564231315151313151315