2017-05-18 9 views
2

私はguava 21.0を使用しており、正規表現(\\d)を指定してStringを分割しようとしています。 しかし、私はなぜ動作していないのか分かりません。正規表現がグアバで動作しない

正規表現ではないもの(たとえば "a")に正規表現を変更すると正常に動作します。ここで

は、コードは次のとおりです。正規表現が適用される

public class SplitWithRegex { 
    public static Iterable<String> splitByRegex(String string, String regex){ 
     return Splitter.on(regex).trimResults().omitEmptyStrings().split(string); 
    } 
    public static void main(String[] args) { 
     Iterable<String> itr = splitByRegex("abc243gca87asas**78sassnb32snb1ss22220220", "\\d"); 
     for(String s : itr){ 
      System.out.println(s); 
     } 
    } 
} 

結果:

abc243gca87asas ** 78sassnb32snb1ss22220220

任意の助けいただければ幸いです。

+0

を使用することができますか? –

+0

@SergeyProkofiev文字列を分割する必要があります。 –

+0

@SergeyProkofievこれは問題を解決しないでしょう、私は後で正規表現を変更することを決めましたか?私は良い考えではないと思うほど多くのコードを修正する必要があります。 –

答えて

5

あなたはSplitter.onPattern("\\d+")で、Splitter.on("\\d+")ではなく使用する必要があります。

Here'sスプリッタのonメソッドのjavadoc、これはこう言われる、

は、セパレータとして与えられた固定文字列を使用してスプリッタを返します。 たとえば、Splitter.on( "、").split( "foo、bar、baz")は、["foo"、 "bar、baz"]を含む 繰り返し可能なものを返します。

したがって、セパレータはStringリテラルではなくregexとして扱われ、予想通り、従って、それはStringを分割しません。あなたが正規表現ベースの分割をしたいなら、あなたは結果が予想されるどのような文字列のsplitメソッドまたはスプリッタのonPattern方法、例えば:

String[] tokens = "abc243gca87asas**78sassnb32snb1ss22220220".split("\\d+"); 
for(String token : tokens){ 
    System.out.println(token); 
} 

public static Iterable<String> splitByRegex(String string, String regex){ 
    return Splitter.onPattern(regex).trimResults().omitEmptyStrings().split(string); 
} 
+2

またはSplitters onPattern(String separatorPattern)メソッド。 – James

+0

'String.split'の答えでは空のトークン文字列を避けるために\\ d +を使う必要があると思います。本から –

+0

が** **なし15 PG、それは言う、「スプリッタクラスはジョイナークラスの機能の 逆を実行グーグルグアバ入門。スプリッタクラスは、単一の 文字で分割することができ、固定文字列、 java.util.regex.Patternのパッケージ、 正規表現を表す文字列、またはCharMatcherクラス( もこの章で説明します別のグアバクラス、)。」今私は本当に混乱している、本は、正規表現を適用することができ、正規表現を適用することができないことを伝えると言っている。 –

関連する問題