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