Java 12 String API Additions


A quick guide to Java 12 String API new methods added. Examples for indent(), transform(), describeConstable(), resolveConstantDesc methods.

1. Overview

Java 12 added a few useful APIs to the commonly used String class. In this tutorial, we will explore and use these new APIs.

  • indent​(int n)
  • transform​(Function<? super String,​? extends R> f)
  • describeConstable()
  • resolveConstantDesc​(MethodHandles.Lookup lookup)

Take a look at Java 11 String API methods which are discussed in depth in the last article.

In all our example, we will use String string = "Java-W3schools";

2. indent (int n)

As the name suggests, the indent () instance method provides the indentation for the given string that means it will add or remove the white characters at the beginning of the string.

Where method argument n indicates the number of leading white space characters to add or remove.

2.1 Signature

public String indent​(int n)

If n value is positive then adds leading white spaces.
If n value is negative then removes leading white spaces.
If n value is zero then the input string is unchanged.

2.2 Example - n positive

See the example program on indent method with value 5.

String value = "indent";

2.3 Output


See the difference between the original string and indented string. Indented string now has 5 empty spaces added to it.

2.4 Example - n negative

In this example, passing a negative value to it and added 4 empty spaces to the input string at the beginning.

String value = "    indent";

2.5 Output

Now observe the output and it has removed 2 empty spaces at the beginning.


If the input string is not having empty spaces at the beginning if n is negative then it will not do anything. Simply it returns the same string.

2.6 Example - n is zero

String inputNZero = "welcome";

2.7 Output


2.8 Internal Code

Internally, first, it converts the input string into lines by calling line() method then it will add n empty spaces by calling " ".repeat(n). Finally, it appends the empty spaces to each line at the beginning.

public String indent(int n) {
        return isEmpty() ? "" :  indent(n, false);

    private String indent(int n, boolean removeBlanks) {
        Stream stream = removeBlanks ? lines(Integer.MAX_VALUE, Integer.MAX_VALUE)
                                             : lines();
        if (n > 0) {
            final String spaces = " ".repeat(n);
            stream = stream.map(s -> spaces + s);
        } else if (n == Integer.MIN_VALUE) {
            stream = stream.map(s -> s.stripLeading());
        } else if (n < 0) {
            stream = stream.map(s -> s.substring(Math.min(-n, s.indexOfNonWhitespace())));
        return stream.collect(Collectors.joining("\n", "", "\n"));

3. transform (Function<? super String, ? extends R> f)

Transform method is important and used to transform the string into one form to another form using Function Functional interface.

Must be used with lambda expression only because Function is part of Java 8 stream API.

3.1 Signature

public  R transform​(Function f)

3.2 Example

We will see a few scenarios in this example program now. If we want to convert all elements of List into uppercase or append some value to it, then the transform method is most usable.

  List fruits = new ArrayList<>();


  List newFruitsList = fruits.stream().map(s -> s.transform(str -> str.toUpperCase())).collect(Collectors.toList());


3.3 Output

From fruits list stream, taking one by one fruit name and passing to transform function which converts into uppercase by calling toUpperCase() method of String class. Collecting all outputs of transform() method into a List using Collectors.toList() method.


Not only toUpperCase() method but also can be used any operation that can be performed on String either adding some content to it or anything. Now just adding "Halwa" to each string in the fruits list.

s -> s.transform(str -> str + " Halwa")

Now the newFruitsList will have the values with added " Halwa" string to each fruit name.

[Mango Halwa, Apple Halwa, Banana Halwa, Avvacado Halwa, Papaya Halwa]

3.4 Internal Code

Internally it just invokes the f.apply() method.

 public  R transform(Function f) {
        return f.apply(this);

4. describeConstable()

Returns an Optional containing the nominal descriptor for this instance, which is the instance itself.

4.1 Signature

public Optional describeConstable()

Java 12 has introduced Constants API in JEP 334. If you look at the String class documentation, it implements two new interfaces from Constants API – Constable, and ConstantDesc. This method is declared in the Constable interface and implemented in the String class.

4.2 Example

 String status = "SUCCESS";
 Optional optional = status.describeConstable();

4.3 Output


5. resolveConstantDesc (MethodHandles.Lookup lookup)

Resolves this instance as a ConstantDesc, the result of which is the instance itself.

5.1 Signature

public String resolveConstantDesc​(MethodHandles.Lookup lookup)

5.2 Example

 String string = "resolveConstantDesc​";
 String constDesc = string.resolveConstantDesc(MethodHandles.lookup());

6. Conclusion

In this tutorial, We've seen the new methods added in Java 12 version. indent (...) and transform() methods add great value to String API. But describeConstable() and resolveConstantDesc methods are not much useful for developers when working on Strings.

Programs shown in this post are available on GitHub. All these programs are downloadable.



About Us

Author: Venkatesh - I love to learn and share the technical stuff.

accumulo,1,ActiveMQ,2,Adsense,1,API,37,ArrayList,18,Arrays,24,Bean Creation,3,Bean Scopes,1,BiConsumer,1,Blogger Tips,1,Books,1,C Programming,1,Collection,8,Collections,37,Collector,1,Command Line,1,Comparator,1,Compile Errors,1,Configurations,7,Constants,1,Control Statements,8,Conversions,6,Core Java,149,Corona India,1,Create,2,CSS,1,Date,3,Date Time API,38,Dictionary,1,Difference,2,Download,1,Eclipse,3,Efficiently,1,Error,1,Errors,1,Exceptions,8,Fast,1,Files,17,Float,1,Font,1,Form,1,Freshers,1,Function,3,Functional Interface,2,Garbage Collector,1,Generics,4,Git,9,Grant,1,Grep,1,HashMap,2,HomeBrew,2,HTML,2,HttpClient,2,Immutable,1,Installation,1,Interview Questions,6,Iterate,2,Jackson API,3,Java,32,Java 10,1,Java 11,6,Java 12,5,Java 13,2,Java 14,2,Java 8,128,Java 8 Difference,2,Java 8 Stream Conversions,4,java 8 Stream Examples,12,Java 9,1,Java Conversions,14,Java Design Patterns,1,Java Files,1,Java Program,3,Java Programs,114,Java Spark,1,java.lang,4,java.util. function,1,JavaScript,1,jQuery,1,Kotlin,11,Kotlin Conversions,6,Kotlin Programs,10,Lambda,2,lang,29,Leap Year,1,live updates,1,LocalDate,1,Logging,1,Mac OS,3,Math,1,Matrix,6,Maven,1,Method References,1,Mockito,1,MongoDB,3,New Features,1,Operations,1,Optional,6,Oracle,5,Oracle 18C,1,Partition,1,Patterns,1,Programs,1,Property,1,Python,2,Quarkus,1,Read,1,Real Time,1,Recursion,2,Remove,2,Rest API,1,Schedules,1,Serialization,1,Servlet,2,Sort,1,Sorting Techniques,8,Spring,2,Spring Boot,23,Spring Email,1,Spring MVC,1,Streams,31,String,61,String Programs,28,String Revese,1,StringBuilder,1,Swing,1,System,1,Tags,1,Threads,11,Tomcat,1,Tomcat 8,1,Troubleshoot,26,Unix,3,Updates,3,util,5,While Loop,1,
JavaProgramTo.com: Java 12 String API Additions
Java 12 String API Additions
A quick guide to Java 12 String API new methods added. Examples for indent(), transform(), describeConstable(), resolveConstantDesc methods.
Loaded All Posts Not found any posts VIEW ALL Readmore Reply Cancel reply Delete By Home PAGES POSTS View All RECOMMENDED FOR YOU LABEL ARCHIVE SEARCH ALL POSTS Not found any post match with your request Back Home Sunday Monday Tuesday Wednesday Thursday Friday Saturday Sun Mon Tue Wed Thu Fri Sat January February March April May June July August September October November December Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec just now 1 minute ago $$1$$ minutes ago 1 hour ago $$1$$ hours ago Yesterday $$1$$ days ago $$1$$ weeks ago more than 5 weeks ago Followers Follow THIS PREMIUM CONTENT IS LOCKED STEP 1: Share to a social network STEP 2: Click the link on your social network Copy All Code Select All Code All codes were copied to your clipboard Can not copy the codes / texts, please press [CTRL]+[C] (or CMD+C with Mac) to copy Table of Content