Complete Java Pattern.splitAsStream tutorial with examples. Learn how to split strings into streams using regex patterns.
Last modified: April 20, 2025
The splitAsStream method is part of Java’s java.util.regex.Pattern class. It splits the input sequence around matches of the pattern and returns a stream of the resulting substrings. This method was introduced in Java 8.
Unlike split which returns an array, splitAsStream returns a Stream<String>. This makes it ideal for functional style processing of the split results. The method is efficient for large inputs.
This example demonstrates the basic usage of splitAsStream. We split a simple comma-separated string into parts and process them using stream operations. The pattern matches commas with optional whitespace.
BasicSplitAsStream.java
package com.zetcode;
import java.util.regex.Pattern; import java.util.stream.Stream;
public class BasicSplitAsStream {
public static void main(String[] args) {
String input = "apple, orange, banana, grape";
Pattern pattern = Pattern.compile("\\s*,\\s*");
Stream<String> fruitStream = pattern.splitAsStream(input);
fruitStream.forEach(System.out::println);
}
}
The code splits the input string at each comma, ignoring surrounding whitespace. The resulting stream contains four elements: “apple”, “orange”, “banana”, and “grape”. We use forEach to print each element.
This example shows how to filter the results of splitAsStream. We split a string containing numbers and filter out non-numeric values. The stream API makes this operation concise.
FilterSplitResults.java
package com.zetcode;
import java.util.regex.Pattern; import java.util.stream.Stream;
public class FilterSplitResults {
public static void main(String[] args) {
String input = "10, 20, thirty, 40, fifty, 60";
Pattern pattern = Pattern.compile("\\s*,\\s*");
pattern.splitAsStream(input)
.filter(s -> s.matches("\\d+"))
.map(Integer::parseInt)
.forEach(System.out::println);
}
}
The code splits the input and filters to keep only numeric strings. The matches check ensures we only process digits. We then convert valid numbers to integers and print them.
This example demonstrates processing CSV data with splitAsStream. We handle quoted values and commas within quotes. The pattern accounts for these special cases in CSV formatting.
CsvProcessing.java
package com.zetcode;
import java.util.regex.Pattern; import java.util.stream.Stream;
public class CsvProcessing {
public static void main(String[] args) {
String input = "\"John, Doe\",25,\"New York, NY\",Developer";
Pattern pattern = Pattern.compile(",(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)");
pattern.splitAsStream(input)
.map(s -> s.replaceAll("^\"|\"$", ""))
.forEach(System.out::println);
}
}
The pattern uses a positive lookahead to handle commas inside quotes. After splitting, we remove the surrounding quotes from each field. This approach correctly processes the “John, Doe” and “New York, NY” values.
This example shows how to process multiline input with splitAsStream. We split text into paragraphs separated by blank lines. The pattern matches one or more newline characters.
MultilineProcessing.java
package com.zetcode;
import java.util.regex.Pattern; import java.util.stream.Stream;
public class MultilineProcessing {
public static void main(String[] args) {
String input = "First paragraph\n\nSecond paragraph\n\n\nThird paragraph";
Pattern pattern = Pattern.compile("\\n+");
pattern.splitAsStream(input)
.filter(p -> !p.isEmpty())
.forEach(p -> System.out.println("Paragraph:\n" + p + "\n"));
}
}
The code splits the input at sequences of newline characters. We filter out empty strings that might result from leading or trailing newlines. Each non-empty paragraph is then printed with a label.
This example demonstrates splitting text into words using splitAsStream. The pattern matches any sequence of non-word characters. We process the words with various stream operations.
WordSplitting.java
package com.zetcode;
import java.util.regex.Pattern; import java.util.stream.Stream;
public class WordSplitting {
public static void main(String[] args) {
String input = "The quick brown fox jumps over the lazy dog";
Pattern pattern = Pattern.compile("\\W+");
pattern.splitAsStream(input)
.map(String::toLowerCase)
.distinct()
.sorted()
.forEach(System.out::println);
}
}
The code splits the input into words at non-word character sequences. We convert words to lowercase, remove duplicates with distinct, sort them, and print. This shows the power of combining splitAsStream with streams.
This example demonstrates processing log file entries with splitAsStream. We split a log string into individual log entries. Each entry is then parsed for specific information.
LogProcessing.java
package com.zetcode;
import java.util.regex.Pattern; import java.util.stream.Stream;
public class LogProcessing {
public static void main(String[] args) {
String logs = "[INFO] User logged in\n" +
"[ERROR] Database connection failed\n" +
"[WARN] Disk space low\n" +
"[INFO] User logged out";
Pattern pattern = Pattern.compile("\\n");
pattern.splitAsStream(logs)
.filter(entry -> entry.startsWith("[ERROR]"))
.forEach(System.out::println);
}
}
The code splits the log string at newline characters. We filter to keep only error entries and print them. This approach is efficient for processing large log files as a stream.
This example shows advanced splitting using lookaheads and lookbehinds. We split a string at positions between digits and letters. This demonstrates complex splitting scenarios.
ComplexSplitting.java
package com.zetcode;
import java.util.regex.Pattern; import java.util.stream.Stream;
public class ComplexSplitting {
public static void main(String[] args) {
String input = "ABC123DEF456GHI789";
Pattern pattern = Pattern.compile("(?<=\\d)(?=\\D)|(?<=\\D)(?=\\d)");
pattern.splitAsStream(input)
.forEach(System.out::println);
}
}
The pattern uses lookbehind and lookahead assertions to split between digit and non-digit characters. The result is a stream of alternating letter and number sequences. This technique is useful for parsing complex formats.
Java Pattern.splitAsStream Documentation
The splitAsStream method provides a powerful way to process split results using Java’s stream API. It’s particularly useful for large inputs and functional-style processing pipelines.
My name is Jan Bodnar, and I am a dedicated programmer with many years of experience in the field. I began writing programming articles in 2007 and have since authored over 1,400 articles and eight e-books. With more than eight years of teaching experience, I am committed to sharing my knowledge and helping others master programming concepts.
List all Java tutorials.