Java String and Java Regex

String is a sequence of characters, for e.g. “Hello” is a string of 5 characters. In java, string is an immutable object which means it is constant and can cannot be changed once it has been created. In this tutorial we will learn about String class and String methods in detail along with many other Java String tutorials.

In Java, string is basically an object that represents sequence of char values. An array of characters works same as Java string.

char[] ch={'c','p','r','o','g','r','a',','m','c','o','d','i','n','g'}; String s=new String(ch);

is same as:

String s="cprogramcoding";

Java String class provides a lot of methods to perform operations on string such as compare(), concat(), equals(), split(), length(), replace(), compareTo(), intern(), substring() etc.

The java.lang.String class implements Serializable, Comparable and CharSequence interfaces.

String in Java
CharSequence Interface

The CharSequence interface is used to represent the sequence of characters. String, StringBuffer and StringBuilder classes implement it. It means, we can create strings in java by using these three classes.

CharSequence in Java

The Java String is immutable which means it cannot be changed. Whenever we change any string, a new instance is created. For mutable strings, you can use StringBuffer and StringBuilder classes.

We will discuss immutable string later. Let's first understand what is String in Java and how to create the String object.

Creating a String

There are two ways to create a String in Java

String literal
  1. Using new keyword
  2. String literal

In java, Strings can be created like this: Assigning a String literal to a String instance:

String str1 = "Welcome"; String str2 = "Welcome";

The problem with this approach: As I stated in the beginning that String is an object in Java. However we have not created any string object using new keyword above. The compiler does that task for us it creates a string object having the string literal (that we have provided , in this case it is “Welcome”) and assigns it to the provided string instances.

But if the object already exist in the memory it does not create a new Object rather it assigns the same old object to the new instance, that means even though we have two string instances above(str1 and str2) compiler only created on string object (having the value “Welcome”) and assigned the same to both the instances. For example there are 10 string instances that have same value, it means that in memory there is only one object having the value and all the 10 string instances would be pointing to the same object.

What if we want to have two different object with the same string? For that we would need to create strings using new keyword.

String Literal

Java String literal is created by using double quotes. For Example:

String s="welcome";

Each time you create a string literal, the JVM checks the "string constant pool" first. If the string already exists in the pool, a reference to the pooled instance is returned. If the string doesn't exist in the pool, a new string instance is created and placed in the pool.

String s1="Welcome"; String s2="Welcome";//It doesn't create a new instance
Java string literal

In the above example, only one object will be created. Firstly, JVM will not find any string object with the value "Welcome" in string constant pool, that is why it will create a new object. After that it will find the string with the value "Welcome" in the pool, it will not create a new object but will return the reference to the same instance.

Note: String objects are stored in a special memory area known as the "string constant pool".
Why Java uses the concept of String literal?

To make Java more memory efficient (because no new objects are created if it exists already in the string constant pool).

Using New Keyword

As we saw above that when we tried to assign the same string object to two different literals, compiler only created one object and made both of the literals to point the same object. To overcome that approach we can create strings like this:

String str1 = new String("Welcome"); String str2 = new String("Welcome");
A Simple Java String Example
public class Example{ public static void main(String args[]){ //creating a string by java string literal String str = "cprogramcoding"; char arrch[]={'h','e','l','l','o'}; //converting char array arrch[] to string str2 String str2 = new String(arrch); //creating another java string str3 by using new keyword String str3 = new String("Java String Example"); //Displaying all the three strings System.out.println(str); System.out.println(str2); System.out.println(str3); } }

cprogramcoding hello Java String Example
Java String Example
public class StringExample{ public static void main(String args[]){ String s1="java";//creating string by java string literal char ch[]={'s','t','r','i','n','g','s'}; String s2=new String(ch);//converting char array to string String s3=new String("example");//creating java string by new keyword System.out.println(s1); System.out.println(s2); System.out.println(s3); } }

java strings example
Java String class methods

The java.lang.String class provides many useful methods to perform operations on sequence of char values.

1char charAt(int index)returns char value for the particular index
2int length()returns string length
3static String format(String format, Object... args)returns a formatted string.
4static String format(Locale l, String format, Object... args)returns formatted string with given locale.
5String substring(int beginIndex)returns substring for given begin index.
6String substring(int beginIndex, int endIndex)returns substring for given begin index and end index.
7boolean contains(CharSequence s)returns true or false after matching the sequence of char value.
8static String join(CharSequence delimiter, CharSequence... elements)returns a joined string.
9static String join(CharSequence delimiter, Iterable<? extends CharSequence> elements)returns a joined string.
10boolean equals(Object another)checks the equality of string with the given object.
11boolean isEmpty()checks if string is empty.
12String concat(String str)concatenates the specified string.
13String replace(char old, char new)replaces all occurrences of the specified char value.
14String replace(CharSequence old, CharSequence new)replaces all occurrences of the specified CharSequence.
15static String equalsIgnoreCase(String another)compares another string. It doesn't check case.
16String[] split(String regex)returns a split string matching regex.
17String[] split(String regex, int limit)returns a split string matching regex and limit.
18String intern()returns an interned string.
19int indexOf(int ch)returns the specified char value index.
20int indexOf(int ch, int fromIndex)returns the specified char value index starting with given index.
21int indexOf(String substring)returns the specified substring index.
22int indexOf(String substring, int fromIndex)returns the specified substring index starting with given index.
23String toLowerCase()returns a string in lowercase.
24String toLowerCase(Locale l)returns a string in lowercase using specified locale.
25String toUpperCase()returns a string in uppercase.
26String toUpperCase(Locale l)returns a string in uppercase using specified locale.
27String trim()removes beginning and ending spaces of this string.
28static String valueOf(int value)converts given type into string. It is an overloaded method.
Program to illustrate all string methods:
// Java code to illustrate different constructors and methods // String class. import*; import java.util.*; class Test { public static void main (String[] args) { String s= "Cprogramcoding"; // or String s= new String ("Cprogramcoding"); // Returns the number of characters in the String. System.out.println("String length = " + s.length()); // Returns the character at ith index. System.out.println("Character at 3rd position = " + s.charAt(3)); // Return the substring from the ith index character // to end of string System.out.println("Substring " + s.substring(3)); // Returns the substring from i to j-1 index. System.out.println("Substring = " + s.substring(2,5)); // Concatenates string2 to the end of string1. String s1 = "Cprogram"; String s2 = "coding"; System.out.println("Concatenated string = " + s1.concat(s2)); // Returns the index within the string // of the first occurrence of the specified string. String s4 = "Learn Share Learn"; System.out.println("Index of Share " + s4.indexOf("Share")); // Returns the index within the string of the // first occurrence of the specified string, // starting at the specified index. System.out.println("Index of a = " + s4.indexOf('a',3)); // Checking equality of Strings Boolean out = "Cprogramcoding".equals("Cprogramcoding"); System.out.println("Checking Equality " + out); out = "Geeks".equals("Cprogramcoding"); System.out.println("Checking Equality " + out); out = "Cprogramcoding".equalsIgnoreCase("cprogramcoding "); System.out.println("Checking Equality" + out); int out1 = s1.compareTo(s2); System.out.println("If s1 = s2" + out); // Converting cases String word1 = "CprogramCoding"; System.out.println("Changing to lower Case " + word1.toLowerCase()); // Converting cases String word2 = "Cprogramcoding"; System.out.println("Changing to UPPER Case " + word1.toUpperCase()); // Trimming the word String word4 = " Learn Share Learn "; System.out.println("Trim the word " + word4.trim()); // Replacing characters String str1 = "Cprogramcoding"; System.out.println("Original String " + str1); String str2 = "Cpragramcoding".replace('a' ,'o') ; System.out.println("Replaced f with g -> " + str2); } }

String length = 14 Character at 3rd position = o Substring ogramcoding Substring = rog Concatenated string = Cprogramcoding Index of Share 6 Index of a = 8 Checking Equality true Checking Equality false Checking Equalityfalse If s1 = s2false Changing to lower Case cprogramcoding Changing to UPPER Case CPROGRAMCODING Trim the word Learn Share Learn Original String Cprogramcoding Replaced f with g -> Cprogromcoding