2010-07-03 3 views
0

Я застрял посередине.omitEmptyStrings не могут работать должным образом

Я создаю класс обертки для com.google.common.base.Splitter.

Но метод omitEmptyStrings не работает должным образом.

Пожалуйста, приложите свои замечательные рекомендации мне.

Вот [вызывающий]

public class Hoge { 
public static void main(String[] args) { 
    Iterable<String> hoge = 
     Splitter.on(",") 
       .omitEmptyStrings() 
       .split(" foo ,,11,bar1 , quux"); 

} 
} 

Это результат: [Foo]
[11]
[bar1]
[quux]

Ниже мой класс Wrapper ,

public final class Splitter extends Object { 

private static final Splitter splitter = new Splitter(); 

private static com.google.common.base.Splitter guavaSplitter; 

private static Object separatorChars = null; 

private static boolean omitEmptyStringsFlg = false; 

private static CharMatcher trimmer = null; 

/** 
    * Default Construction 
    * This constructor is private to deny access 
    * 
    */ 
private Splitter() { 
} 
    /** 
    * setting guava Splitter to this class guavaSplitter 
    * 
    * @param separatorMatcher 
    * @return Splitter 
    */ 
    public static Splitter on(final String separator) { 

if (StringUtils.isEmpty(separator)) { 
    Splitter.guavaSplitter = null; 
} else { 
    Splitter.guavaSplitter 
     = com.google.common.base.Splitter.on(separator); 

    Splitter.separatorChars = separator; 
} 

return Splitter.splitter; 

    } 

/** 
    * setting guava Splitter to this class guavaSplitter 
    * 
    * @return Splitter 
    */ 

public Splitter omitEmptyStrings() { 

    if (null != Splitter.guavaSplitter) { 

    if (Splitter.separatorChars instanceof String) { 
    if (null != Splitter.trimmer) { 
    Splitter.guavaSplitter 
     = com.google.common.base.Splitter.on(
     (String)Splitter.separatorChars) 
     .omitEmptyStrings() 
     .trimResults(Splitter.trimmer); 

    } else { 
    Splitter.guavaSplitter 
     = com.google.common.base.Splitter.on(
     (String)Splitter.separatorChars).omitEmptyStrings(); 

    } 

    } 

    } 
    Splitter.omitEmptyStringsFlg = true; 
    return Splitter.splitter; 
} 

    /** 
    * Splits the {@link CharSequence} passed in parameter. 
    * 
    * @param sequence the sequence of characters to split 
    * @return an iteration over the segments split from the parameter. 
    */ 
    public Iterable<String> split(final CharSequence sequence) { 
Iterable<String> retList = new List(); 

    if (null != sequence && null != Splitter.guavaSplitter) { 
    retList = Splitter.guavaSplitter.split(sequence); 

    } 

    return retList; 
    } 

} 


/** 
* 
* Returns an iterator over a set of elements of type String. 
* 
*/ 
class List implements Iterable<String> { 

private java.util.List<String> splittedList 
    = new java.util.ArrayList<String>(); 

@Override 
public Iterator<String> iterator() { 
    return this.splittedList.iterator(); 
} 
} 
+4

В каком смысле это не работает? Он пропускает пустую строку между «foo» и «11». –

+1

Почему именно вы пишете эту обертку? Почему бы просто не использовать сплиттер Guava? Кроме того, как сказал Джон, похоже, что он работает так, как ожидалось. – ColinD

+1

это много кода, но что все это на самом деле? –

ответ

1

Похоже, что вы хотели trimResults в дополнение к omitEmptyStrings, не так ли?

Смежные вопросы