Java中的String类下的正则表达式运用附带编程题解析

以下是我做牛客网题时,遇到的使用正则表达式可以简单化代码,所以我们需要掌握这两个知识点,方便解决以后遇到类似的问题。

1. public String replaceAll(String regex,String replacement)
使用给定的 replacement 字符串替换此字符串匹配给定的正则表达式的每个子字符串**
replaceAll的参数是regex,即基于正则表达式的替换,比如,可以通过replaceAll("\d", "")把一个字符串所有的数字字符都换成
如果只想替换第一次出现的,可以使用replaceFirst(),这个方法也是基于规则表达式的替换,但与replaceAll()不同的是,只替换第一次出现的字符串;

另外,如果replaceAll()和replaceFirst()所用的参数据不是基于规则表达式的,则与replace()替换字符串的效果是一样的,即这两者也支持字符串的操作;
2,publilc boolean matches(String regex):
matches() 方法用于检测字符串是否匹配给定的正则表达式。

```
Pattern.matches(regex, str)
public boolean matches(String regex)

参数:regex – 匹配字符串的正则表达式。//(.)...(.)或者【】
两种表达式产生的结果完全相同
``

public class Demo1 {
//代码示例

public static void main(String[] args){

    String Str = new String("我是一只小小鸟");

    System.out.println("返回值 :"+Str.matches("(.*)一只(.*)"));

    boolean flag = Str.matches("我是(.*)");
    if(flag){
        System.out.println("我被重新定义为:HelloWord!");
    }else{
        System.out.println("我没有被重新定义!");
    }
}

}
执行jie'gu
返回值 :true
我被重新定义为:HelloWord!


********(编程题)
开发一个坐标计算工具, A表示向左移动,D表示向右移动,W表示向上
移动,S表示向下移动。从(0,0)点开始移动,从输入字符串里面读取
一些坐标,并将最终输入结果输出到输出文件里面。

输入:
合法坐标为A(或者D或者W或者S) + 数字(两位以内)
坐标之间以;分隔。非法坐标点需要进行丢弃。如AA10;  A1A;  $%$;  YAD; 等。
下面是一个简单的例子 如:
10;S20;W10;D30;X;A1A;B10A11;;A10;
处理过程:
起点(0,0)
+   A10   =  (-10,0)
+   S20   =  (-10,-20)
+   W10  =  (-10,-10)
+   D30  =  (20,-10)
+   x    =  无效
+   A1A   =  无效
+   B10A11   =  无效
+  一个空 不影响
+   A10  =  (10,-10)
结果 (10, -10)
注意请处理多组输入输出**

import java.util.*;
public class Main{
 public static void main(String[] args){
Scanner sc=new Scanner(System.in);
 while(sc.hasNext()){
 String str=sc.nextLine();
 String[] A=str.split(";");
 int x=0,y=0;
 for(String string:A){
 if(string.charAt(0)=='D' && string.substring(1).matches("[0-9]+"))
 //  +   的意思是匹配一次或者多次,可以是9.99.999.。。。
 x+=Integer.parseInt(string.substring(1));

 if(string.charAt(0)=='W' && string.substring(1).matches("[0-9]+"))
 y+=Integer.parseInt(string.substring(1));

 if(string.charAt(0)=='S' && string.substring(1).matches("[0-9]+"))
y-=Integer.parseInt(string.substring(1));

 if(string.charAt(0)=='A' && string.substring(1).matches("[0-9]+"))
 x-=Integer.parseInt(string.substring(1));

 }
System.out.println(x+","+y);
 }

 sc.close();
 }

}

经常碰到的编程题:
删除公共字符
****# > *输入两个字符串,从第一字符串中删除第二个字符串
# > 中所有的字符。例如,输入”They are students.”和”aeiou”,
# > 则删除之后的第一个字符串变成”Thy r stdnts.”***
import java.util.Scanner;
public class DeleteChar {
    public static void main(String[] args) {
        Scanner scanner=new Scanner(System.in);
        while (scanner.hasNext()){
            String src=scanner.nextLine();
            String dest=scanner.nextLine();
           String patten="["+dest+"]";//正则表达式的规则形式
           String result=src.replaceAll(patten,"");//src是不变的
                     //用空串去替代出现在src中的patten(以及patten的任意一个字串)
            System.out.println(result);

        }

    }
}
上一篇:SpringBoot中ConditionalOnClass注解的原理


下一篇:makefile(3)函数