Data Structure
Networking
RDBMS
Operating System
Java
MS Excel
iOS
HTML
CSS
Android
Python
C Programming
C++
C#
MongoDB
MySQL
Javascript
PHP
- Selected Reading
- UPSC IAS Exams Notes
- Developer's Best Practices
- Questions and Answers
- Effective Resume Writing
- HR Interview Questions
- Computer Glossary
- Who is Who
Java Regex to extract maximum numeric value from a string
In this article, we will learn to extract the maximum numeric value from a string using Java's regex. While Java provides several ways to handle string manipulation, regular expressions (regex) offer a powerful and efficient tool for such tasks.
Problem Statement
The maximum numeric value is extracted from an alphanumeric string. An example of this is given as follows ?
Input
String = abcd657efgh234
Output
Maximum numeric value = 657
Using Java Regex and Pattern Class
Java provides the Pattern and Matcher classes to work with regular expressions. The Pattern class compiles a regular expression, and the Matcher class is used to find matches of the regex pattern in the target string.
-
Pattern.compile(regex) method compiles the regular expression into a Pattern object.
- The matcher(input) method applies the compiled pattern to the input string.
- The while loop iterates over each match found in the string.
- matcher.group() retrieves the matched number (as a string), which is then parsed into an integer.
Example
Below is an example of extracting the maximum numeric value from a string using Java Regex
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Example {
public static void main (String[] args) {
String str = "123abc874def235ijk999";
System.out.println("The string is: " + str);
String regex = "\d+";
Pattern ptrn = Pattern.compile(regex);
Matcher match = ptrn.matcher(str);
int maxNum = 0;
while(match.find()) {
int num = Integer.parseInt(match.group());
if(num > maxNum) {
maxNum = num;
}
}
System.out.println("The maximum numeric value in above string is: " + maxNum);
}
}
Output
The string is: 123abc874def235ijk999 The maximum numeric value in above string is: 999
Using regex with Java Streams
With Java 8 and later, streams provide a more concise and functional programming style for handling tasks like this. The stream API makes it easy to manipulate collections, and when combined with regular expressions, it offers a very clean way to extract and process numeric values.
- The split() method splits the string by any non-digit characters (\D+). This effectively separates the numbers from the rest of the string.
- The isEmpty() ensures that we don't process any empty strings that result from consecutive non-digit characters.
- The mapToInt(Integer::parseInt) converts each numeric string into an integer.
- The max() method finds the maximum number in the stream, and orElse(0) ensures that if no numbers are found, we default to 0.
Example
import java.util.Arrays;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
public class MaxNumericExtractorWithStreams {
public static void main(String[] args) {
String input = "abc123def456ghi789xyz000";
System.out.println("Input String: " + input);
// Use streams to extract numbers and find the maximum
int maxNumber = Arrays.stream(input.split("\D+"))
.filter(s -> !s.isEmpty())
.mapToInt(Integer::parseInt)
.max()
.orElse(0);
// Output the maximum numeric value
System.out.println("The maximum numeric value in the string is: " + maxNumber);
}
}
Output
Input String: abc123def456ghi789xyz000
The maximum numeric value in the string is: 789