Guava의 Splitter 예시의 반대인 Joiner 예시이다. 

trimResults()와 omitEmptyString()가 많이 쓰인다. 


Guava의 Joiner.on과 좀 다르게 다양한 파싱을 할 수 있도록 on() 뿐 아니라 onPattern(), on(CharMatcher) 메솓,등을 사용할 수 있다. 특정 길이(fixedLength)나, 파싱 갯수(limit)를 활용하여 파싱할 수 있다.



  /*
List
*/
@Test
public void splitterTest1() {
String input = "samuel,kent, flynn";
// not trim
List<String> list = Splitter.on(",").splitToList(input);
logger.info("{}", list);

// trim
List<String> list1 = Splitter.on(",").trimResults().splitToList(input);
logger.info("{}", list1);
}

// 결과
// [samuel, kent, flynn]
// [samuel, kent, flynn]

/*
empty string
*/
@Test
public void splitterTest2() {
String input = "samuel,kent,flynn,,";
List<String> list = Splitter.on(",").trimResults().splitToList(input);
logger.info("before omit - {}", list);

List<String> list1 = Splitter.on(",").omitEmptyStrings().splitToList(input);
logger.info("after omit - {}", list1);
}

// 결과
// before omit - [samuel, kent, flynn, , ]
// after omit - [samuel, kent, flynn]

/*
Map
*/
@Test
public void splitterTest3() {
String input = "name=samuel&age=41&department=server&id=1001237";
Map<String, String> map = Splitter.on("&").withKeyValueSeparator("=").split(input);
MapUtils.debugPrint(System.out, "map", map);
}

/*
결과
map =
{
name = samuel java.lang.String
age = 41 java.lang.String
department = server java.lang.String
id = 1001237 java.lang.String
} java.util.Collections$UnmodifiableMap
*/


/*
Map, multiple separator, onPattern/anyOf
*/
@Test
public void splitterTest4() {
String input = "name=samuel&age=41&department=server,id=1001237";
Map<String, String> map = Splitter.onPattern("[&|,]").withKeyValueSeparator("=").split(input);
MapUtils.debugPrint(System.out, "map", map);

map = Splitter.on(CharMatcher.anyOf("[&|,]")).withKeyValueSeparator("=").split(input);
MapUtils.debugPrint(System.out, "map", map);
}
/*
결과
map =
{
name = samuel java.lang.String
age = 41 java.lang.String
department = server java.lang.String
id = 1001237 java.lang.String
} java.util.Collections$UnmodifiableMap
*/

@Test
public void splitterTest5() {
String input = "111222333444555";
List<String> list = Splitter.fixedLength(3).splitToList(input);
logger.info("{}", list);
}
// 결과
// [111, 222, 333, 444, 555]


/*
limit
*/
@Test
public void splitterTest6() {
String input = "111,22,33333,444,555";
List<String> list = Splitter.on(",")
.limit(2)
.splitToList(input);
logger.info("{}", list);

list = Splitter.on(",")
.limit(3)
.splitToList(input);
logger.info("{}", list);

list = Splitter.on(",")
.limit(4)
.splitToList(input);
logger.info("{}", list);

list = Splitter.on(",")
.limit(5)
.splitToList(input);
logger.info("{}", list);

list = Splitter.on(",")
.limit(6)
.splitToList(input);
logger.info("{}", list);
}

// 결과
// [111, 22,33333,444,555]
// [111, 22, 33333,444,555]
// [111, 22, 33333, 444,555]
// [111, 22, 33333, 444, 555]
// [111, 22, 33333, 444, 555]


Posted by '김용환'
,