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] 아래

내 래퍼 클래스입니다 .

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

정확히이 포장지를 쓰고있는 이유는 무엇입니까? 구아바 분배기 자체를 사용하지 않는 이유는 무엇입니까? 또한 Jon과 마찬가지로 이것은 예상대로 작동하는 것으로 보입니다. – ColinD

+1

이것은 많은 코드이지만 실제로 모두 무엇을합니까? –

답변

1

omitEmptyStrings 외에도 trimResults를 원했던 것처럼 보였습니까?