2010-07-03 325 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"); 

} 
} 

這是結果: [富]
[11]
[BAR1]
[QUUX]

下面是我的包裝類。

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」之間的空字符串。 – 2010-07-03 13:37:35

+1

爲什麼你寫這個包裝?爲什麼不使用Guava Splitter本身?此外,像喬恩說,這似乎是按預期工作。 – ColinD 2010-07-03 15:41:49

+1

這是很多代碼,但它真的做了什麼? – 2010-07-03 23:40:14

回答

1

看起來像你想trimite除了omitEmptyStrings之外,不是嗎?