Google의 Java 라이브러리 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 범위