2012-03-13 16 views
-2

私はこの文字列を持っていますvar1=val1&&var2=val2。 javaの正規表現のサポートを使用して、私はこのような文字列を分割したいと思います{val1, val2}。すなわち、得られるアレイは、val1およびval2を含むべきである。言い換えれば、等号で終わる単語と特殊文字& &を削除したいと思います。これらのすべてを正規表現で使いたいと思います。誰かが私にこれを助けてくれますか?あなただけのsplit()を使用することができこの文字列を分割する(var1 = val1 && var2 = val2)Javaの正規表現を使用

+1

正規表現が必要なのはなぜですか?値に '&&'が含まれていないことがわかっている場合は、単純な文字列置換を '、'にして、中括弧の前に追加して追加することができます。 – Viruzzo

答えて

1

彼は正規表現を求めます。..ので、ここでは、あなたがそれを行う方法です。

提供正規表現は変数が長いだけで2変数(ある場合のみですIEの場合、分割する文字列は入力したパターンとまったく同じです)。 Regex for javaの では、PatternクラスとMatcherクラスを使用します。

String[] vars = {"", ""}; 

String toCheck = "var1=val1&&var2=val2"; 

Pattern p = Pattern.compile(".*?=(.*?).*?=(.*$)"); 
Matcher m = p.matcher(toCheck); 

while(m.find()){ 
    vars[0] = m.group(1); 
    vars[1] = m.group(2); 
} 

私が使用する非常に便利なツールは、このです:http://myregexp.com/signedJar.htmlあなたは完全にはregexで理解していない場合

そのハードその周りにあなたの頭を取得します..しかし、それだけであなたの時間とテスト物事を取りますJavaアプレット^あなたの正規表現をリアルタイムでコンパイルし、本当に有益です。)

注:正規表現は、「var1」、「var2」、「val1」および「val2」が何であっても一致します。 EG:それは一致します:ユーザ名= derpa & &パスワード=ヘルパ

と出力が配列のようなものになるだろう:運の{derpa、ヘルパ}

最高..私は私が使う今、正規表現を嫌っそれらすべての時間:複数の変数のためのD

[EDIT]

が、これは私がそれを行うだろうかです:

 ArrayList<String> vars = new ArrayList<String>(); 

     String toCheck = "var1=val1&&var2=val2&&var3=val3&&var4=val4"; 

     Pattern p = Pattern.compile("(.*?)=(.*?)&&|(.*?)=(.*?)$"); 
     Matcher m = p.matcher(toCheck); 

     while(m.find()){ 
      String val = m.group(2); 
      if(val == null) 
       vars.add((m.group(4))); 
      else 
       vars.add(val); 
     } 

     for(int j = 0; j < vars.size(); j++){ 
      System.out.println(vars.get(j)); 
     } 

これはテストされ、動作します。

+0

ありがとうございました。私はより多くを持っていると言います。たとえば、私はvar1 = val1 && var2 = val2 && var3 = val3 && var4 = val4を持ち、これは毎回変わります。私が今述べた問題の解決策を誰かに教えてもらえますか?前もって感謝します。 – Dev

+0

OK、私はその正規表現のxD: – Kaden

+0

の最初の解答を編集しました。 – Kaden

3

public static void main(String[] args) throws Exception { 
    String s = "var1=val1&&var2=val2"; 
    String[] exp = s.split("&&"); 
    String[] values = new String[] {exp[0].split("=")[1], exp[1].split("=")[1]}; 
    System.out.println(Arrays.deepToString(values)); //prints [val1, val2] 
} 
関連する問題