正则表达式:100个错误

时间:2011-07-24 00:18:01

标签: java

我正在尝试学习正则表达式,但在阅读完java教程后,我的表现并不好。

这个程序应该采用格式:

a)将dd dd加在一起 b)从13减去05 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);
        }
      }
    }

2 个答案:

答案 0 :(得分: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,然后正则表达式解析器将正确解释转义字符。

答案 1 :(得分:3)

呃从哪里开始...

首先关闭Pattern.compile()期待正则表达式(格式字符串),而matcher()期望字符串进行测试

@Samir向您展示了代码本身的正则表达式有什么问题(为了更加清晰,我对它们进行了一些编辑)

l.matches需要()

你不能在原始布尔变量上调用方法if(b)就足以测试它是否为真

要获得特定的子匹配,您需要使用capturing groups

将字符串连接在一起,您可以使用+

输出一些东西到控制台System.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))) );
      }
    }
  }
}