2011-07-24 6 views
0

正規表現について学んでいますが、Javaチュートリアルを読んだあとではうまくいきません。正規表現:100個のエラー

このプログラムの形式で入力プログラムを取ることになっている。

A)のDD DD一緒 B)05から13 Cを減算する)02から03

を追加し(DDを返すを追加します+または - )dd = answer

私がこれを設定するのは、progに3つのマッチのいずれかを見つけようとすることです。ユーザーが "bye"を入力するまでこれを続けます。一致するものがなければ、ユーザーに再度入力を求める必要があります。

ここに私のコードです!正確に100のエラーがあります。 :/ 誰でも構文を助けることができれば、本当に感謝しています!

import java.util.*; 
    import java.util.regex.Pattern; 
    import java.util.regex.Matcher; 

    class Calculator { 
     public static void main(String[] args){ 
     Scanner imp = new Scanner(System.in); 
     System.out.println("yes> "); 
     String s = imp.nextLine(); 

     if (s.equals("bye")) { 
      System.exit(0); 
     } 

     while (true) { 

      Pattern p = Pattern.compile(s); //compile string, check for formats 

      Matcher x = p.matcher(\badd\b\s\d\d\s\d\d\s\btogether\b); //format add 12 12 together 
      Matcher y = p.matcher(\bsubtract\b\s\d\d\s\d\d\s\bfrom\b); //format subtract 05 from 13 
      Matcjer z = p.matcher(\badd\b\s\d\d\s\bto\b\s\d\d); //format add 02 to 03 

      boolean b = p.matches; 

      boolean l = x.matches; 
      boolean i = y.matches; 
      boolean g = z.matches; 

      if (l.equals(true)) 
      return (\d\d " + " \d\d " = " \d\d+\d\d); 
      else if (i.equals(true)) 
      return (\d\d " + " \d\d " = " \d\d-\d\d); 
      else if (g.equals(true)) 
      return (\d\d " + " \d\d " = " \d\d+\d\d); 
     } 
     } 
    } 
+5

コンパイラは100の後にエラーを出力しなくなります。もっと多くのものがあります。 –

+0

LOL。素晴らしいニュースキャメロン。 – mdegges

+2

良いニュースは、1つの間違いが多くのコンパイラエラーを生成する可能性があるため、おそらく100 *本物の*エラーよりもはるかに少ないことです。 –

答えて

3

ぐふどこ開始する... Pattern.compile()オフ最初

は、正規表現(書式文字列)を期待していますコード自体(私はそれらをより明確にするためビットを編集した)

l.matchesニーズ()

にあなたは原始的なブールvariablのメソッドを呼び出すことはできませんそれが真実であるかどうか

および特定のサブマッチを得るためにあなたが一緒にあなたがコンソールシステムに出力何かに+

を使用することができます文字列を連結するcapturing groups

を使用する必要がある場合、ES if(b)をテストするのに十分です。 out.printlnを解決するには、最も明白なエラーで

を返さないで使用する必要があります。

import java.util.*; 
import java.util.regex.Pattern; 
import java.util.regex.Matcher; 

class Calculator { 
    public static void main(String[] args){ 
    Scanner imp = new Scanner(System.in); 
    System.out.println("yes> "); 


    while (true) { 
     String s = imp.nextLine();//put getting the input inside the loop or it's infinite 

     if (s.equals("bye")) { 
      System.exit(0); 
     } 

     Matcher x = Pattern.compile("add\\s(\\d+)\\s(\\d+)\\stogether").matcher(s); //format add 12 12 together 
     Matcher y = Pattern.compile("subtract\\s(\\d+)\\sfrom\\s(\\d+)").matcher(s); //format subtract 05 from 13 
     Matcjer z = Pattern.compile("add\\s(\\d+)\\sto\\s(\\d+)").matcher(s); //format add 02 to 03 


     boolean l = x.matches(); 
     boolean i = y.matches(); 
     boolean g = z.matches(); 

     if (l){ 
     System.out.println(l.group(1) + " + " + l.group(2) + " = " + 
      (Integer.parseInt(l.group(1))+Integer.parseInt(l.group(2)))); 
     }else if (i){ 
     System.out.println(i.group(1) + " - " + i.group(2) + " = " + 
      (Integer.parseInt(i.group(1))+Integer.parseInt(i.group(2)))); 
     }else if (g){ 
     System.out.println(g.group(1) + " + " + g.group(2) + " = " + 
      (Integer.parseInt(g.group(1))+Integer.parseInt(g.group(2)))); 
     } 
    } 
    } 
} 
+0

グルーピングを実装して文字列を解析する方法を示してくれてありがとう。とても役に立ちました。 – mdegges

+0

私はしばらく私を理解するためにちょっとした編集をしました:1.この方法は、ユーザが数字をdd +/- ddの形式で入力したい場合にのみ機能します。任意の桁数を入力できるように調整するには、フォーマットを( "add \\ s(。*)\\ stogether")に変更する必要があります。ちょうど数字を検索するには2番目の正規表現が必要です。 2.印刷するときは、matcherVariable.group(number)にする必要があります。 – mdegges

+0

@micheleコード内の新しい正規表現を1桁以上チェックする場合は '(\ d +)'を使用することもできます –

5

EclipseやIntelliJ IDEAなどのIDEでコードを見てみましたか?彼らはあなたのためにエラーを強調表示します。私が見ている主なものは、正規表現を文字列に入れないことです。 Javaにはネイティブ正規表現がないため、文字列として指定する必要があります。ここに例があります:

Matcher x = p.matcher("\\badd\\b\\s\\d\\d\\s\\d\\d\\s\\btogether\\b"); //format add 12 12 together 

バックスラッシュをどのように倍増したかに注目してください。これは、Javaではもちろん正規表現でもエスケープ文字なのでです。コンパイラは上記の文字列を\badd\b\s\d\d\s\d\d\s\btogether\bと解釈し、正規表現パーサーはエスケープ文字を正しく解釈します。 matcher()が文字列

@Samirは、正規表現で間違っていた何を示しているに対してテストすることを期待しながら、

+0

ありがとう!私は引用符や別のセットが必要であることを理解していませんでした。 – mdegges

+0

私は主にdr javaとcmd行を使用しています。しかし時にはエラーが出ることがあります(今では "シンボルマッチを見つけることができません")。それを修正する方法はわかりません。私はちょうどチュートリアルからコードを編集していて、 'x.matches'は正規表現プログラムで正常に動作しました。 – mdegges