1. Java 11 String Stream<String> lines() Overview
In this tutorial, We'll learn how to convert String to Stream. lines() method returns Stream of Strings. We'll go through String lines() Method Examples.
Simple words, This method break down the string into lines if input string has lime terminators.
Supported line terminators are '\n', '\r' and '\r\n'.
"\n": a line feed character
"\r": a carriage return character
"\r\n": a carriage return followed immediately by a line feed
Read article on Java 11 String additions
1.1 Syntax
public Streamlines()
This is a public method and can be accessed on string instance directly.
1.2 Since
Java 11
1.3 Returns
This method returns Stream of lines extracted from this string.
1.4 Parameters
Does not accept any parameters.
2. String.lines() Example - To get stream of lines
We will take a look at the sample programs using lines() method.
2.1 String.lines() example without line terminator(s)
Taking string value as "welcome to Java-w3schools blog" and this is not having any line terminator in it. Now, We should expect that returned stream should be having only one line.
String value = "welcome to Java-w3schools blog"; Streamstream = value.lines(); stream.forEach(line -> System.out.println(line));
Output:
Ran this program and produced below output.
welcome to Java-w3schools blog
Only one line is printed as expected because input has no line terminators.
2.2 Example Program with '\n' using lines() Method
Let us take look at the input in the below example and it has now '\n' in it. Next, lines() method should extract each line and put into stream.
String withLineTerminators = "Very gald \nto meet you \nMr. Jhon Cena"; StreamlineTeminatorStream = withLineTerminators.lines(); lineTeminatorStream.forEach(line -> System.out.println(line));
Output:
See the below output and converted into lines.
Very gald to meet you Mr. Jhon Cena
2.3 Example Program with '\r' using lines() Method
Input is same as above but just replaced '\n' with carriage terminator '\r'
String carrierLineTerminators = "Very gald \nto meet you \nMr. Jhon Cena"; StreamcarrierTeminatorStream = carrierLineTerminators.lines();
Output is same as above.
Very gald to meet you Mr. Jhon Cena
2.3 Example '\r'\n' using lines() Method
String bothLineTerminators = "Very gald \r\nto meet you \r\nMr. Jhon Cena"; StreambothTeminatorStream = bothLineTerminators.lines();
Output will be same above.
3. lines() Internal Code
lines() method internally calls overloaded lines(int maxLeading, int maxTrailing) method passing maxLeading as '0' and maxTrailing as '0'.
Passes the string to LinesSpliterator.spliterator(value). It internally invokes skipBlankForward() and skipBlankBackward() methods to find out the line terminator index. Based on the index, it will break down into new line. Each new line added to Stream. Finally returns Stream<String>.
public Streamlines() { return lines(0, 0); } private Stream lines(int maxLeading, int maxTrailing) { return isLatin1() ? StringLatin1.lines(value, maxLeading, maxTrailing) : StringUTF16.lines(value, maxLeading, maxTrailing); } private static int skipBlankForward(byte[] value, int start, int length) { int index = start; while (index < length) { char ch = getChar(value, index++); if (ch == '\n') { return index; } if (ch == '\r') { if (index < length && getChar(value, index) == '\n') { return index + 1; } return index; } if (ch != ' ' && ch != '\t' && !Character.isWhitespace(ch)) { return start; } } return length; }
4. Conclusion
In this article, We've seen the new method introduced in Java 11 in String class. Learn how to covert String to Stream of strings.
Example program on each line terminator '\r', '\n' and '\r\n'.
Discussion on lines() method internal code implementation.
Note: This method provides better performance than string split('\n') method in breaking down multi-line input.
Example code snippets shown in this article is available on GitHub.
No comments:
Post a Comment
Please do not add any spam links in the comments section.