package de.axone.tools.string; import java.util.Arrays; import java.util.List; import java.util.Set; import java.util.regex.Pattern; import java.util.stream.Stream; @SuppressWarnings( "unused" ) public abstract class Splittor { public static interface ArraySplittor { public String [] split( String value ); } public static interface ListSplittor { public List<String> split( String value ); } public static interface SetSplittor { public Set<String> split( String value ); } public static interface StreamSplittor { public Stream<String> split( String value ); } public static class SplittorBuilder { private final Character splitAtChar; private final String splitAtString; private final Pattern splitAtPattern; public SplittorBuilder( Character splitAtChar, String splitAtString, Pattern splitAtPattern ) { super(); this.splitAtChar = splitAtChar; this.splitAtString = splitAtString; this.splitAtPattern = splitAtPattern; } public OnceSplittorBuilder once() { return new OnceSplittorBuilder(); } public SplittorBuilder limited( int num ){ return null; } public SplittorBuilder trimmed(){ return null; } public SplittorBuilder startAt( int num ){ return null; } public ArraySplittor asArray(){ return null; } public ListSplittor asList() { return null; } public SetSplittor asSet() { return null; } public StreamSplittor asStream() { return null; } } private static class OnceSplittorBuilder { public ArraySplittor asArray(){ return null; } public ListSplittor asList() { return new ListSplittorWrapper( asArray() ); } public StreamSplittor asStream() { return new StreamSplittorWrapper( asArray() ); } public OnceTrimmedSplittorBuilder trimmed(){ return new OnceTrimmedSplittorBuilder(); } } private static class OnceTrimmedSplittorBuilder { public ArraySplittor asArray(){ return null; } public ListSplittor asList() { return new ListSplittorWrapper( asArray() ); } public StreamSplittor asStream() { return new StreamSplittorWrapper( asArray() ); } } private static class StreamSplittorWrapper implements StreamSplittor { private final ArraySplittor wrapped; StreamSplittorWrapper( ArraySplittor wrapped ){ this.wrapped = wrapped; } @Override public Stream<String> split( String value ) { return Arrays.stream( wrapped.split( value ) ); } } private static class ListSplittorWrapper implements ListSplittor { private final ArraySplittor wrapped; ListSplittorWrapper( ArraySplittor wrapped ){ this.wrapped = wrapped; } @Override public List<String> split( String value ) { return Arrays.asList( wrapped.split( value ) ); } } public static SplittorBuilder by( String splitAt ){ return new SplittorBuilder( null, splitAt, null ); } public static SplittorBuilder by( char splitAt ){ return new SplittorBuilder( splitAt, null, null ); } public static SplittorBuilder byPattern( String pattern ){ return new SplittorBuilder( null, null, Pattern.compile( pattern ) ); } public static SplittorBuilder byWhitespace(){ return new SplittorBuilder( null, null, null ); } public static void main( String [] args ) throws Exception { String value = ""; Stream<String> s1 = Splittor.by( '/' ).asStream().split( value ); List<String> l1 = Splittor.by( "-,-" ).trimmed().asList().split( value ); String [] a1 = Splittor.by( "-,-" ).once().trimmed().asArray().split( value ); Splittor.by( "-,-" ).trimmed().once().asArray(); Splittor.by( "-,-" ).limited( 5 ).trimmed().asArray(); Splittor.byWhitespace().trimmed().startAt( 1 ).asSet(); } }