2009-06-16 7 views
1

C#コードをJavaに移植する必要があり、文字列分割コマンドを変換する際に問題が発生しています。C#RegexをJavaパターンに分割する

実際の正規表現はまだ正しいですが、C#で分割すると正規表現トークンは結果の文字列[]に含まれますが、Javaでは正規表現のトークンは削除されます。

スプリットオントークンを維持する最も簡単な方法は何ですか?ここで

は、私はそれ望むように動作しますC#コードの例です:

using System; 

using System.Text.RegularExpressions; 

class Program 
{ 
    static void Main() 
    { 
     String[] values = Regex.Split("5+10", @"([\+\-\*\(\)\^\\/])"); 

     foreach (String value in values) 
      Console.WriteLine(value); 
    } 
} 

Produces: 
5 
+ 
10 
+4

私はあなたの入力と分割するために使用している正規表現の例を教えてください? –

+0

一般的な注意として、私は文字クラス(大括弧 "[]")の中では非常に多くのバックスラッシュは必要ないと確信しています。他の誰も確認できますか? –

+0

私はおそらくバックスラッシュは必要ありませんが、私は正規表現を書いていない、私はちょうどコードを移植しています。 – user108088

答えて

1

C#の処理方法はわかりませんが、Javaで実現するには、それを近似する必要があります。どのようにしてthis codeがそれをするのかを見てください:

public String[] split(String text) { 
    if (text == null) { 
     text = ""; 
    } 

    int last_match = 0; 
    LinkedList<String> splitted = new LinkedList<String>(); 

    Matcher m = this.pattern.matcher(text); 

    // Iterate trough each match 
    while (m.find()) { 
     // Text since last match 
     splitted.add(text.substring(last_match,m.start())); 

     // The delimiter itself 
     if (this.keep_delimiters) { 
      splitted.add(m.group()); 
     } 

     last_match = m.end(); 
    } 
    // Trailing text 
    splitted.add(text.substring(last_match)); 

    return splitted.toArray(new String[splitted.size()]); 
} 
1

あなたがスプリット・トークンをキャプチャしているためです。 C#は、結果の配列のメンバとしてトークン自体を保持したいというヒントとしてこれを使用します。 Javaはこれをサポートしていません。

+0

以下を試してください: using System; using System.Text.RegularExpressions; クラスプログラム {静的な無効メイン(){ のString []の値= Regex.Split( "10 + 10" @ "([\ + \\ * \(\)\^\\ /】 ) "); foreach(値の文字列値) Console.WriteLine(value); } } – user108088

関連する問題