从给定字符串中提取最大数值 |第 2 组(正则表达式方法)
给定一个字母数字字符串,从该字符串中提取最大数值。
例子:
Input : 100klh564abc365bg
Output : 564
Maximum numeric value among 100, 564
and 365 is 564.
Input : abchsd0365sdhs
Output : 365
在 Set 1 中,我们讨论了从给定字符串中提取数值的一般方法。在这篇文章中,我们将讨论相同的正则表达式方法。
以下是至少一个数字的正则表达式之一。
\d+
所以正则表达式解决方案很简单:
- 初始化 MAX = 0
- 在匹配器上运行循环,每当找到匹配时,将数字字符串转换为整数并将其与 MAX 进行比较。
- 如果 number 大于 MAX,则将 MAX 更新为 number。
- 最后返回 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