How to Use Google's Java Library Guava

Explains Google Guava features and how to use them.

Classes for Manipulating Strings

This section covers basic classes. The basic classes mainly include classes that manipulate strings: the Strings class for handling strings themselves, the Joiner class for joining strings, and the Splitter class for splitting strings.

Strings Class

The Strings class is a class for manipulating character strings. It provides the isNullOrEmpty(), emptyToNull(), and nullToEmpty() methods for checking or manipulating null and empty strings.

Let’s look at how each method is used and what result it produces.

isNullOrEmpty()

First, here is an example of the isNullOrEmpty method. It returns true if the argument value is null or empty. If a value exists, it returns false. A string containing only a half-width space also returns false.

Strings.isNullOrEmpty(null); // "true"가 반환된다.
Strings.isNullOrEmpty("");   // "true"가 반환된다.
Strings.isNullOrEmpty("a");  // "false"가 반환된다.
Strings.isNullOrEmpty(" ");  // "false"가 반환된다.
package com.devkuma.guava.strings;

import com.google.common.base.Strings;

public class StringIsNullOrEmpty {
    public static void main(String[] args) {
        System.out.println(Strings.isNullOrEmpty(null));
        System.out.println(Strings.isNullOrEmpty(""));
        System.out.println(Strings.isNullOrEmpty("a"));
        System.out.println(Strings.isNullOrEmpty(" "));
    }
}

Execution result:

true
true
false
false

commonPrefix(), commonSuffix()

Returns the common prefix or suffix string from the two strings specified as arguments.

// commonPrefix
Strings.commonPrefix("abc12345", "abcABCDE"); // "abc"가 반환된다.
Strings.commonPrefix("setHoge", "setMoge");   // "set"가 반환된다.

// commonSuffix
Strings.commonSuffix("12345abc", "ABCabc");  // "abc"가 반환된다.
Strings.commonSuffix("removable", "usable"); // "able"가 반환된다.
package com.devkuma.guava.strings;

import com.google.common.base.Strings;

public class StringCommonPrefixCommonSuffix {

    public static void main(String[] args) {
        // commonPrefix
        System.out.println(Strings.commonPrefix("abc12345", "abcABCDE"));
        System.out.println(Strings.commonPrefix("setHoge", "setMoge"));

        // commonSuffix
        System.out.println(Strings.commonSuffix("12345abc", "ABCabc"));
        System.out.println(Strings.commonSuffix("removable", "usable"));
    }
}

Execution result:

abc
set
abc
able

padStart(), padEnd()

Pads a string with the specified character until its length reaches the specified length, and returns the resulting string.

// padStart
Strings.padStart("123", 5, '0'); // "00123"가 반환된다.

// padEnd
Strings.padEnd("123", 5, '0'); // "12300"가 반환된다.
package com.devkuma.guava.strings;

import com.google.common.base.Strings;

public class StringPadStartPadEnd {
    public static void main(String[] args) {
        // padStart
        Strings.padStart("123", 5, '0');

        // padEnd
        Strings.padEnd("123", 5, '0');
    }
}

Execution result:

00123
12300

repeat()

Returns a string created by repeating the string specified as an argument the specified number of times.

Strings.repeat("0", 10);  // "0000000000"가 반환된다.
Strings.repeat("hey", 3); // "heyheyhey"가 반환된다.
package com.devkuma.guava.strings;

import com.google.common.base.Strings;

public class StringRepeat {
    public static void main(String[] args) {
        System.out.println(Strings.repeat("0", 10));
        System.out.println(Strings.repeat("hey", 3));
    }
}

Execution result:

0000000000
heyheyhey

Joiner Class

The Joiner class makes it easy to join strings. It provides a variety of joining methods.

Array join()

Joining a string array. The following example joins values with commas.

//  "abc, def, ghi"의 문자열이 반환된다.
String[] values = {"abc", "def", "ghi"};
String result = Joiner.on(',').join(values);
package com.devkuma.guava.joiner;

import com.google.common.base.Joiner;

public class JoinerArrayJoin {
    public static void main(String[] args) {
        String[] values = {"abc", "def", "ghi"};
        String result = Joiner.on(',').join(values);

        System.out.println(result);
    }
}

Execution result:

abc,def,ghi

List join()

You can also join a list of strings.

List values = new ArrayList();
values.add("abc");
values.add("def");
values.add("ghi");
String result = Joiner.on(',').join(values);
package com.devkuma.guava.joiner;

import java.util.ArrayList;
import java.util.List;

import com.google.common.base.Joiner;

public class JoinerArrayJoin {
    public static void main(String[] args) {
        List values = new ArrayList();
        values.add("abc");
        values.add("def");
        values.add("ghi");
        String result = Joiner.on(',').join(values);

        System.out.println(result);
    }
}

Execution result:

abc,def,ghi

skipNulls()

You can use the skipNulls method to skip null values when joining.

// 다음 예제의 경우 "abc, ghi"가 반환된다.
List values = new ArrayList();
values.add("abc");
values.add(null);
values.add("ghi");
String result = Joiner.on(',').skipNulls().join(values);
package com.devkuma.guava.joiner;

import java.util.ArrayList;
import java.util.List;

import com.google.common.base.Joiner;

public class JoinerSkipNullsJoin {
    public static void main(String[] args) {
        List values = new ArrayList();
        values.add("abc");
        values.add(null);
        values.add("ghi");
        String result = Joiner.on(',').skipNulls().join(values);

        System.out.println(result);
    }
}

Execution result:

abc,ghi

Joining a Map

You can also use a Map as an argument to create a key-value string.

// "name=tom&age=20" 값이 반환된다.
Map map = new HashMap();
map.put("name", "tom");
map.put("age", "20");
String result = Joiner.on('&').withKeyValueSeparator("=").join(map);
package com.devkuma.guava.joiner;

import java.util.HashMap;
import java.util.Map;

import com.google.common.base.Joiner;

public class JoinerWithKeyValueSeparator {
    public static void main(String[] args) {
        Map map = new HashMap();
        map.put("name", "tom");
        map.put("age", "20");
        String result = Joiner.on('&').withKeyValueSeparator("=").join(map);

        System.out.println(result);
    }
}

Execution result:

name=tom&age=20

Splitter Class

The Splitter class helps split strings. It can split strings by a variety of criteria, including character count, a specified character, and key-value pairs.

fixedLength()

Using the fixedLength method of the Splitter class, you can split a string by a specified number of characters.

// 다음의 경우 "abcde", "fghij", "klmn"의 문자열 목록이 반환됩니다.
List list = Splitter.fixedLength(5).splitToList("abcdefghijklmn");
package com.devkuma.guava.splitter;

import java.util.List;

import com.google.common.base.Splitter;

public class SplitterFixedLength {
    public static void main(String[] args) {
        List list = Splitter.fixedLength(5).splitToList("abcdefghijklmn");

        System.out.println(list);
    }
}

Execution result:

[abcde, fghij, klmn]

on()

Using the on method of the Splitter class, you can split a string by the specified character.

// 다음은 쉼표로 문자열을 분할하고 "devkuma", "araikuma", "kimkc" 문자열 목록을 반환한다.
List list = Splitter.on(',').splitToList("devkuma,araikuma,kimkc");
package com.devkuma.guava.splitter;

import java.util.List;

import com.google.common.base.Splitter;

public class SplitterOn {

    public static void main(String[] args) {
        List list = Splitter.on(',').splitToList("devkuma,araikuma,kimkc");

        System.out.println(list);
    }
}

Execution result:

[devkuma, araikuma, kimkc]

Splitting a Map

Splits a key-value character string, such as a query string.

// 다음의 경우, 키 "name"에 "tom", 키 "age"에 "20"이 저장된 Map이 반환된다.
Splitter.on("&").trimResults().withKeyValueSeparator('=').split("name=devkuma&age=20");
package com.devkuma.guava.splitter;

import java.util.Map;

import com.google.common.base.Splitter;

public class SplitterWithKeyValueSeparator {

    public static void main(String[] args) {
        Map<String, String> map = Splitter.on("&").trimResults().withKeyValueSeparator('=').split("name=devkuma&age=20");

        System.out.println(map);
    }
}

Execution result:

{name=devkuma, age=20}

Range

Using Range makes it easier to determine whether a specified number or character is within a range.

package com.devkuma.guava.range;

import com.google.common.collect.Range;

public class RangeContains {

    public static void main(String[] args) {
        Range<Integer> range = Range.closed(1, 10); //open 은 등호 제외  1 < x < 10

        int target = 3;

        if (range.contains(target)) { // if (target >= 1 && target <= 10)
            System.out.println("1 ~ 10 범위");
        }
    }
}

Execution result:

1 ~ 10 범위