Templates by BIGtheme NET

Guava’s String Helpers – Joiner, Splitter, CharMatcher and Charsets

This article help to understand and best use of Guava’s string helper classes,
Joiner, Splitter, CharMatcher and Charsets.

Joiner and Splitter helper classes configuration methods will always return a new instance.
This makes these classes as thread safe and can be usable as a static final constant.

Joiner : Joining together a sequence of strings with a separator.
To deal with null values, this provide two methods.
1) skipNulls() – to skip null values and joining together.

 Joiner.on(",").skipNulls().join("Jhon", null, "Smith", "Clement") 

2) useForNull(String) – we can replace null values with specified string passed as argument value
and joining together.

 Joiner.on(",").useForNull("nullReplaceString")
.join("Jhon", null, "Smith", "Clement"); 

3) withKeyValueSeparator(String keyValueSeparator) – we can get all key and values of Map with specified separator.

 Joiner.on(",").withKeyValueSeparator(",").join(aMap) 

We can use this joiner to generate global unique identifier value.

 Joiner.on(sysIp).join(processId, randomNumber, time) 

JoinerExample .java

package com.venkatjavasource.guava.string;

import java.util.Calendar;
import java.util.HashMap;
import java.util.Map;
import java.util.Random;
import java.util.TimeZone;
import java.util.UUID;

import com.google.common.base.Joiner;

public class JoinerExample {

	public static void main(String[] args) {
		System.out.println("skipNulls() METHOD EXAMPLE: "
				+ Joiner.on(",").skipNulls()
						.join("Jhon", null, "Smith", "Clement"));

		System.out.println("nuseForNull() METHOD EXAMPLE: "
				+ Joiner.on(",").useForNull("nullReplaceString")
						.join("Jhon", null, "Smith", "Clement"));

		final Map aMap = new HashMap();
		aMap.put("K1", "V1");
		aMap.put("K2", "V2");
		aMap.put("K3", "V3");
		System.out.println("nMAP KEY AND VALUES ARE: "
				+ Joiner.on(",").withKeyValueSeparator(",").join(aMap));

		// How to generate Global unique identifiers in Java
		final String sysIp = "134.37.74.153";
		final String processId = UUID.randomUUID().toString();
		final Random random = new Random();
		final String randomNumber = Integer
				.toString(Math.abs(random.nextInt()));
		final long time = Calendar.getInstance(TimeZone.getDefault()).getTime()
				.getTime();
		System.out.println("nJAVA GLOBAL UNIQUE IDENTIFIER:n"
				+ Joiner.on(sysIp).join(processId, randomNumber, time));
	}
}

Select “Run As” -> “Java Application”
Out Put :

skipNulls() METHOD EXAMPLE: Jhon,Smith,Clement

useForNull() METHOD EXAMPLE: Jhon,nullReplaceString,Smith,Clement

MAP KEY AND VALUES ARE: K1,V1,K2,V2,K3,V3

JAVA GLOBAL UNIQUE IDENTIFIER:
9b083c1d-dff4-46cf-b146-5ba52a4f2fae134.37.74.1531620088547134.37.74.1531432016483251

Splitter : This is used to split string depends on some delimiter value.
The delimiter can be, a single character (or) occurrences of any character in some category (or)
a string literal (or) a regular expression (or) sub-strings of the specified fixed length.

Remember the string value passing to split method should not be null. If it is null throws java.lang.NullPointerException.

 Splitter.on('$').split(null); // Throw null pointer error

The Splitter come with four modifiers,
1) omitEmptyStrings() – omits empty strings from the result.
2) trimResults() – Trims white-space from the results.
3) trimResults(CharMatcher) – Trims characters matching the specified CharMatcher from results.
4) limit(int) – Stops splitting after the specified number of strings have been returned.
SpliterExample.java

package com.venkatjavasource.guava.string;

import java.util.regex.Pattern;

import com.google.common.base.CharMatcher;
import com.google.common.base.Splitter;

public class SpliterExample {

	public static void main(String[] args) {

		try {
			System.out.println("split() METHOD WITH null value EXAMPLE: "
					+ Splitter.on('$').split(null));
		} catch (final NullPointerException exp) {
			System.out.println("NullPointerException >> " + exp.getMessage());
		}

		System.out.println("n*********SPLITER EXAMPLE*********");
		System.out.println("Splitter.on(char) METHOD EXAMPLE: "
				+ Splitter.on('$').split(SPLITER_STRING));

		System.out.println("Splitter.on(String) METHOD EXAMPLE: "
				+ Splitter.on("$").split(SPLITER_STRING));

		System.out.println("Splitter.fixedLength(int) METHOD EXAMPLE: "
				+ Splitter.fixedLength(3).split(SPLITER_STRING));

		System.out.println("Splitter.on(CharMatcher) METHOD EXAMPLE: "
				+ Splitter.on(CharMatcher.WHITESPACE).split(SPLITER_STRING));

		System.out.println("Splitter.on(Pattern) METHOD EXAMPLE: "
				+ Splitter.on(SAMPLE_REGX_PATTERN).split("ArBrC"));

		System.out.println("Splitter.onPattern( METHOD EXAMPLE: "
				+ Splitter.onPattern("r?n").split("ArBrC"));

		System.out.println("n*********SPLITER MODIFIERS EXAMPLE*********");
		System.out.println("trimResults() METHOD EXAMPLE: "
				+ Splitter.on('$').trimResults().split(SPLITER_STRING));

		System.out
				.println("trimResults() and omitEmptyStrings() METHOD EXAMPLE: "
						+ Splitter.on('$').trimResults().omitEmptyStrings()
								.split(SPLITER_STRING));

		System.out.println("limit(int) METHOD EXAMPLE: "
				+ Splitter.on('$').limit(15).split(SPLITER_STRING));

		System.out.println("trimResults() METHOD EXAMPLE: "
				+ Splitter.on(',').trimResults(CharMatcher.is('_'))
						.split("_JH_,ON_ ,SM_I_,__TH_,AD_AM"));
	}

	private static final String SPLITER_STRING = "JHON$SMITH$$   ADAM";
	private static final Pattern SAMPLE_REGX_PATTERN = Pattern.compile("r?n");
}

Select Run As -> “Java Application”.
Out Put:

NullPointerException >> null

*********SPLITER EXAMPLE*********
Splitter.on(char) METHOD EXAMPLE: [JHON, SMITH, ,    ADAM]
Splitter.on(String) METHOD EXAMPLE: [JHON, SMITH, ,    ADAM]
Splitter.fixedLength(int) METHOD EXAMPLE: [JHO, N$S, MIT, H$$,    , ADA, M]
Splitter.on(CharMatcher) METHOD EXAMPLE: [JHON$SMITH$$, , , ADAM]
Splitter.on(Pattern) METHOD EXAMPLE: [A
B
C]
Splitter.onPattern( METHOD EXAMPLE: [A
B
C]

*********SPLITER MODIFIERS EXAMPLE*********
trimResults() METHOD EXAMPLE: [JHON, SMITH, , ADAM]
trimResults() and omitEmptyStrings() METHOD EXAMPLE: [JHON, SMITH, ADAM]
limit(int) METHOD EXAMPLE: [JHON, SMITH, ,    ADAM]
trimResults() METHOD EXAMPLE: [JH, ON_ , SM_I, TH, AD_AM]

CharMatcher :CharMatcher as representing a particular class of characters,
like digits or white space…etc.
CharMatcherExample.java

package com.venkatjavasource.guava.string;

import com.google.common.base.CharMatcher;

public class CharMatcherExample {

	public static void main(String[] args) {

		System.out.println("RETAIN ONLY DIGITS :"
				+ CharMatcher.DIGIT.retainFrom(CHARMATCHER_STRING));
		System.out.println("REMOVE ONLY DIGITS :"
				+ CharMatcher.DIGIT.removeFrom(CHARMATCHER_STRING));
		// Instead of trim(), it is always recommended to use
		// CharMatcher.WHITESPACE.trimFrom() to trim
		System.out.println("REMOVE WHITESPACE :"
				+ CharMatcher.WHITESPACE.trimFrom(" Hello   "));

		System.out.println("RETAIN ONLY JAVA_LETTER :"
				+ CharMatcher.JAVA_LETTER.retainFrom(CHARMATCHER_STRING));
		System.out.println("RETAIN ONLY JAVA_LETTER_OR_DIGIT :"
				+ CharMatcher.JAVA_LETTER_OR_DIGIT
						.retainFrom(CHARMATCHER_STRING));
		System.out.println("RETAIN ONLY JAVA_LOWER_CASE :"
				+ CharMatcher.JAVA_LOWER_CASE.retainFrom(CHARMATCHER_STRING));
		System.out.println("RETAIN ONLY JAVA_UPPER_CASE :"
				+ CharMatcher.JAVA_UPPER_CASE.retainFrom(CHARMATCHER_STRING));
		// ASCII, meaning that its code point is less than 128.
		System.out.println("RETAIN ONLY ASCII :"
				+ CharMatcher.ASCII.retainFrom(CHARMATCHER_STRING));
		// Unicode category is any of SPACE_SEPARATOR, LINE_SEPARATOR,
		// PARAGRAPH_SEPARATOR, CONTROL, FORMAT, SURROGATE, and
		// PRIVATE_USE according to ICU4J.
		System.out.println("RETAIN ONLY INVISIBLE :"
				+ CharMatcher.INVISIBLE.retainFrom(CHARMATCHER_STRING));

		System.out.println("RETAIN ONLY INVISIBLE :"
				+ CharMatcher.ANY.retainFrom(CHARMATCHER_STRING));
	}

	private static final String CHARMATCHER_STRING = "zxcvbnmasdfghjklqwertyuiopZXCVBNMASDFGHJKLQWERTYUIOP1234567890!@#$%^&*()";
}

Select Run As -> “Java Application”
Out Put :

RETAIN ONLY DIGITS :1234567890
REMOVE ONLY DIGITS :zxcvbnmasdfghjklqwertyuiopZXCVBNMASDFGHJKLQWERTYUIOP!@#$%^&*()
REMOVE WHITESPACE :Hello
RETAIN ONLY JAVA_LETTER :zxcvbnmasdfghjklqwertyuiopZXCVBNMASDFGHJKLQWERTYUIOP
RETAIN ONLY JAVA_LETTER_OR_DIGIT :zxcvbnmasdfghjklqwertyuiopZXCVBNMASDFGHJKLQWERTYUIOP1234567890
RETAIN ONLY JAVA_LOWER_CASE :zxcvbnmasdfghjklqwertyuiop
RETAIN ONLY JAVA_UPPER_CASE :ZXCVBNMASDFGHJKLQWERTYUIOP
RETAIN ONLY ASCII :zxcvbnmasdfghjklqwertyuiopZXCVBNMASDFGHJKLQWERTYUIOP1234567890!@#$%^&*()
RETAIN ONLY INVISIBLE :
RETAIN ONLY INVISIBLE :zxcvbnmasdfghjklqwertyuiopZXCVBNMASDFGHJKLQWERTYUIOP1234567890!@#$%^&*()

Charsets :
Provides constant references to the six standard Charset implementations guaranteed to be supported
by all Java platform implementations.

Six types of character sets are defined in Charsets class. We can use these, instead of declaring
our own.
1) Charsets.ISO_8859_1
2) Charsets.US_ASCII
3) Charsets.UTF_16
4) Charsets.UTF_16BE
5) Charsets.UTF_16LE
6) Charsets.UTF_8

*** Venkat – Happy leaning ****