package com.levelup.java.string;
import static org.junit.Assert.assertTrue;
import java.util.Arrays;
import java.util.List;
import java.util.StringTokenizer;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import org.apache.commons.lang3.StringUtils;
import org.apache.log4j.Logger;
import org.junit.Test;
import com.google.common.base.Splitter;
import com.google.common.collect.Lists;
/**
* This java example will demonstrate splitting of a string based on a
* delimiter.
*
* It is likely if you are dealing with single field with multiple values such
* as select_139393_494949, you may need to parse string values. OR you want to
* iterate over a string to determine the number of times a word occurred.
*
* @author Justin Musgrove
* @see <a href='http://www.leveluplunch.com/java/examples/split-string/'>Split
* string</a>
*
*/
public class SplitStrings {
private static final Logger logger = Logger.getLogger(SplitStrings.class);
private static final String CONSTANT_STRING = "The Dog goes woof, The cat goes meow, the cow says moo, the duck says quack";
@Test
public void split_string_using_stringtokenizer_java() {
StringTokenizer stringTokenizer = new StringTokenizer(CONSTANT_STRING);
int numberOfTokens = stringTokenizer.countTokens();
while (stringTokenizer.hasMoreElements()) {
logger.info(stringTokenizer.nextElement());
}
assertTrue(numberOfTokens == 16);
}
@Test
public void split_string_using_string_split_java() {
String delims = "[ ]+";
String[] tokens = CONSTANT_STRING.split(delims);
logger.info(Arrays.toString(tokens));
assertTrue(tokens.length == 16);
}
@Test
public void split_string_using_string_split_java8() {
List<String> splitString = Stream.of(CONSTANT_STRING)
.map(w -> w.split("[ ]+")).flatMap(Arrays::stream)
.collect(Collectors.toList());
logger.info(splitString);
assertTrue(splitString.size() == 16);
}
@Test
public void split_string_whitespace_using_guava() {
List<String> elementsInString = Lists.newArrayList(Splitter.on(" ")
.split(CONSTANT_STRING));
logger.info(elementsInString);
assertTrue(elementsInString.size() == 16);
}
@Test
public void split_string_white_space_using_apache_commons() {
String[] elementsInString = StringUtils.split(CONSTANT_STRING);
logger.info(Arrays.toString(elementsInString));
assertTrue(elementsInString.length == 16);
}
}