Google의 Java 라이브러리 Guava 사용법

Google Guava의 기능과 사용법에 대해 설명한다.

문자열을 조작하는 클래스

여기서는 기본 클래스를 다룬다. 기본 클래스에는 주로 문자열을 조작하는 클래스가 있다. 문자열 자체를 다루는 Strings 클래스, 문자열을 결합하는 Joiner 클래스, 문자열을 분할하는 Spliter 클래스가 있다.

Strings 클래스

Strings 클래스는 캐릭터 라인을 조작하기 위한 클래스이다. null와 공백을 검증 또는 조작하기 위해서 isNullOrEmpty(), emptyToNull(), nullToEmpty() 메소드가 있다.

각각의 사용법과 실행 결과에 대해 살펴다.

isNullOrEmpty()

먼저 isNullOrEmpty 메소드의 예제이다. 인수의 값이 null 혹은 공백의 경우에 true를 반환한다. 값이 있으면 false를 반환한다. 일본어에 있는 반각 스페이스만의 경우도 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(" "));
    }
}

실행 결과:

true
true
false
false

commonPrefix(), commonSuffix()

인수에 지정된 두 문자열에서 공통 접두사/접미사 문자열을 반환한다.

// 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"));
    }
}

실행 결과:

abc
set
abc
able

padStart(), padEnd()

문자열 길이가 지정된 길이가 될 때까지 지정된 문자로 패딩을 수행하고 문자열을 반환한다.

// 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');
    }
}

실행 결과:

00123
12300

repeat()

인수로 지정한 문자열을 지정한 횟수만큼 반복한 문자열을 반환한다.

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));
    }
}

실행 결과:

0000000000
heyheyhey

Joiner 클래스

Joiner 클래스는 문자열의 결합을 간단하게 하는 클래스이다. 다양한 결합 방법을 제공해 준다.

Array join()

문자열의 배열 결합 다음 예제는 쉼표로 결합하는 예제이다.

//  "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);
    }
}

실행 결과:

abc,def,ghi

List join()

문자열 목록을 결합할 수도 있다.

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);
    }
}

실행 결과:

abc,def,ghi

skipNulls()

skipNulls 메소드를 사용하여 병합 할 때 null 값을 건너 뛸 수 있다.

// 다음 예제의 경우 "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);
    }
}

실행 결과:

abc,ghi

Map 결합

Map을 인수로 사용하여 KeyValue 문자열을 만들 수도 있다.

// "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);
    }
}

실행 결과:

name=tom&age=20

Splitter 클래스

Splitter 클래스는 문자열 분할을 도와주는 클래스이다. 문자수, 지정한 문자, KeyValue 등 다양한 기준으로 문자열 분할을 할 수 있다.

fixedLength()

Splitter 클래스의 fixedLength 메소드를 사용하면, 지정된 문자 수로 문자열 분할할 수 있다.

// 다음의 경우 "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);
    }
}

실행 결과:

[abcde, fghij, klmn]

on()

Splitter 클래스의 on 메소드를 사용하면, 지정된 문자로 문자열 분할할 수 있다.

// 다음은 쉼표로 문자열을 분할하고 "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);
    }
}

실행 결과:

[devkuma, araikuma, kimkc]

Map 분활

KeyValue 로 되어 있는 캐릭터 라인(쿼리 캐릭터 라인과 같은 캐릭터 라인)을 분해한다.

// 다음의 경우, 키 "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);
    }
}

실행 결과:

{name=devkuma, age=20}

Range

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 범위");
        }
    }
}

실행 결과:

1 ~ 10 범위



최종 수정 : 2024-01-18