2010-07-03 8 views
0

Je suis coincé au milieu.omitEmptyStrings ne peut pas être travaillé correctement

Je crée une classe wrapper pour com.google.common.base.Splitter.

Mais la méthode omitEmptyStrings ne fonctionne pas correctement.

S'il vous plaît, donnez-moi vos conseils impressionnants.

Voici [l'appelant]

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

} 
} 

Ceci est le résultat: [foo]
[11]
[bar1]
[quux]

est Ci-dessous ma classe 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

En quoi cela ne fonctionne-t-il pas? Il omet la chaîne vide entre le "foo" et "11". –

+1

Pourquoi écrivez-vous exactement ce wrapper? Pourquoi ne pas simplement utiliser le séparateur de goyave lui-même? Aussi, comme Jon a dit que cela semble fonctionner comme prévu. – ColinD

+1

c'est beaucoup de code, mais qu'est-ce que tout cela fait vraiment? –

Répondre

1

Il semble que vous vouliez trimResults en plus de omitEmptyStrings, n'est-ce pas?

Questions connexes