我正在尝试学习正则表达式,但在阅读完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);
}
}
}
答案 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))) );
}
}
}
}