2010-07-03 326 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之外,不是吗?