java正则表达式的简单入门

来源:互联网 发布:软件开发 需求文档 编辑:程序博客网 时间:2024/06/07 09:22

  1.对于正则表达式的理解:正则表达式是专门用于对于字符串进行操作的技术,用于对复杂字符串进行处理。

在学习正则表达式的语法前我们先看看String类中和正则相关的几个方法(来自中文javaApi)。String类的split,matcher方法,还有其它的就不贴图了。



看了这个有没有觉得正则表达式原来很简单,我们经常都在用和正则相关的一些方法,我们也经常写正则表达式。当然这一切都是幻觉。正则表达式其实是相当复杂的,他的语法中都是有很多难记的符号,当然没必要全部记住的。我们只要能够理解他的语法规则,到时候能够很快查阅使用就好。当然熟能生巧是必不可少的。

  2.语法,具体的语法规则我就不做具体的描述,可以查看java官方的API看不懂英文就看中文的吧。下面是我总结的几个小点。

   正则解析规则:正则表达式是一个一个解析的也就是所谓的规则也是一位一位的同字符串进行匹配的。例如 正则"abc"那么就意味着字符串由三位且必须为abc。

  正则中的[]:个人理解[]在正则表达式中可以把[]理解成为一个字符。

  正则中的():再简单的问题上可以把它理解为具多有正则规则的字符结合体(具体体现在下面的代码会有相对的应用)。

  3.正则的使用(汉语计算器,可以连续计算 例如:三加五十七减五乘二)对字符串的匹配,切割,替换,获取进行

import java.util.ArrayList;import java.util.Scanner;import java.util.regex.Matcher;import java.util.regex.Pattern;public class Main {public static void main(String[] args) {Main main = new Main();String inPut = main.input();//1,检查输入inPut = main.checkInput(inPut);//2.对合法的输入进行匹配,获取得到操作符ArrayList<String> op = main.getOp(inPut);//3.对字符串进行切割,得到操作数据String number[] = inPut.split("[加减乘除]");//4.对操作数进行中文数字转换ArrayList<Integer> result = main.changeToNumber(number);//5.得到计算结果System.out.println("结果:"+main.calculate(op, result));}/** * 计算 * @param op操作符 * @param result 操作数据*/private int calculate(ArrayList<String> op, ArrayList<Integer> result) {int num=result.get(0);//先进行乘除运算for(int i=0; i<op.size(); i++){if(op.get(i).equals("乘")){//连续两次都是i因为第一次移除后后面的长度都会自动-1int num1 = result.remove(i) * result.remove(i);result.add(i, num1);System.out.println("发现优先运算*"+num1 +"=");op.remove(i);}else if(op.get(i).equals("除")){int num1 = result.remove(i) / result.remove(i);result.add(i, num1);op.remove(i);System.out.println("发现优先运算*"+num1);}}for(int i=0; i<op.size(); i++){if(op.get(i).equals("加")){num = num + result.get(i+1);}else if(op.get(i).equals("减")){num = num - result.get(i+1);} }return num;}private ArrayList<Integer> changeToNumber(String[] number) {ArrayList<Integer> result = new ArrayList<>();for(int i=0; i<number.length; i++){result.add(getNumber(number[i]));}return result;}/** * 将字符串变成数字 * @param 中文数字例如:一千五百零三 * @return 数字(如输入为一千五百零三,返回1503) * */private int getNumber(String num){int number = 0;int result = 0;int length = num.length();int temp =1;for(int i=length-1; i>=0; i--){char a = num.charAt(i);switch(a){case '零':{number=0*temp;break;}case '一':{number=1*temp;break;}case '二':{number=2*temp;break;}case '三':{number=3*temp;break;}case '四':{number=4*temp;break;}case '五':{number=5*temp;break;}case '六':{number=6*temp;break;}case '七':{number=7*temp;break;}case '八':{number=8*temp;break;}case '九':{number=9*temp;break;}case '万':{temp = 10000;number=0;break;}case '千':{temp = 1000;number=0;break;}case '百':{temp=100;number=0;break;}case '十':{temp=10;number=0;break;}}result = result + number;}return result;}/** * 得到操作符 * 依照某种规则获取 * 在官方API发现正则的使用例子 *  Pattern p = Pattern.compile("a*b");  *Matcher m = p.matcher("aaaaab");  *boolean b = m.matches();  * * */private ArrayList<String> getOp(String num) {System.out.println("OP");ArrayList<String> op = new ArrayList<String>();Pattern pattern = Pattern.compile("[加减乘除]");Matcher matcher = pattern.matcher(num);while(matcher.find()){System.out.println("op="+matcher.group());op.add(matcher.group());}return op;}/** * 输入*/private String input() {System.out.println("请输入要计算的数字:");Scanner input = new Scanner(System.in);String num = input.nextLine();return num;}/** * 检查输入是否合法,规则:首个字符不能是零,第一个数字后面接操作符和一个数字,可以是一个或多个 * 合法的话就返回该字符串,否则重新输入 * */private String checkInput(String num) {String regex = "^['一''二''三''四''五''六''七''八''九''万''百''千''十']+([加减乘除]" +"['一''二''三''四''五''六''七''八''九''万''百''千''十']+)+";String result = "";boolean b = num.matches(regex);if(!b){ //不匹配System.out.println("您输入的数据不合法,需要重新输入");result = checkInput(input());}else{result = num;}return result;}}

这里是我这两天学习对正则表达式的理解与使用,个人感觉使用一些简单地正则,看懂这样的一个例子是没问题的。

0 0