Pages

Footer Pages

Spring Boot

Java String API

Java Conversions

Kotlin Programs

Kotlin Conversions

Java Threads Tutorial

Java 8 Tutorial

Friday, November 19, 2021

Java 11 String.lines() - Get Stream of Lines

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

Java 11 String API lines() Method Example

Read article on Java 11 String additions

1.1 Syntax

public Stream lines()

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";
Stream stream =  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";
Stream lineTeminatorStream =  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";
Stream carrierTeminatorStream =  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";
Stream bothTeminatorStream =  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 Stream lines() {
    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.