GoogleのJavaライブラリGuavaの使い方
文字列を操作するクラス
ここでは基本クラスを扱う。基本クラスには、主に文字列を操作するクラスがある。文字列そのものを扱うStringsクラス、文字列を結合するJoinerクラス、文字列を分割するSplitterクラスがある。
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()
引数に指定された2つの文字列から、共通する接頭辞または接尾辞の文字列を返す。
// 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 범위