Pattern Matcher

本文介绍了一个Java程序示例,展示了如何使用正则表达式去除特定字符串,并通过Matcher类的appendReplacement方法实现字符串替换。此外,还解释了在使用该方法时需要注意的转义字符处理技巧。

package test;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Test1 {

public static void main(String[] args) {
String hql = " from Users abc by type order by id abc limit 0,3";
removeOrders(hql);
}

/**
* 使用Matcher.appendReplacement(String str1, String str2)时要注意,最好这样用:
Matcher.appendReplacement(String str1, String str2.replaceAll("\\\\", "\\\\\\\\").replaceAll("\\$", "\\\\\\$"));

1replaceAll("\\\\", "\\\\\\\\")是为了把"\"符号加上,如果不进行这部处理,"\"符号就会被删除!
2replaceAll("\\$", "\\\\\\$")是为了把"$"符号转义,因为"$"后加数字是表示第几组的意思!

* @param hql
* @return
*/
private static String removeOrders(String hql){
// Assert.hasText(hql);
Pattern p=Pattern.compile("abc",Pattern.CASE_INSENSITIVE);
Matcher m=p.matcher(hql);
StringBuffer sb=new StringBuffer();
//find()方法表示是否有符合的字符串,group()方法则可以将符合的字符串返回
while(m.find()){
System.out.println(m.group());
//将当前匹配子串替换为指定字符串,并且将替换后的子串以及其之前到上次匹配子串之后的字符串段添加到一个StringBuffer对象里。
//appendReplacement方法先添加字符串中从当前位置到下一个 匹配位置之间的所有字符,然后添加替换值。
m.appendReplacement(sb,"ttitfly");
System.out.println(sb.toString());
}
//将最后一次匹配工作后剩余的字符串添加到一个StringBuffer对象里。
//appendTail添加的 是字符串中从最后一次匹配的位置之后开始,直到结尾的部分
m.appendTail(sb);
System.out.println(sb.toString());
return sb.toString();

}
}


输出结果:
abc
from Users ttitfly
abc
from Users ttitfly by type order by id ttitfly
from Users ttitfly by type order by id ttitfly limit 0,3
Java 中的 `Pattern.matches` 方法用于检查给定的输入字符串是否与指定的正则表达式完全匹配。此方法的行为等价于先使用 `Pattern.compile(regex)` 编译正则表达式,然后通过返回的 `Pattern` 实例调用 `matcher(input).matches()`,这意味着它尝试将整个输入字符串与模式进行匹配,而不是部分匹配[^3]。 ### 方法签名 ```java public static boolean matches(String regex, CharSequence input) ``` - **参数**: - `regex`:表示正则表达式的字符串。 - `input`:需要被匹配的输入字符串。 - **返回值**: - 如果输入字符串完全匹配正则表达式,则返回 `true`。 - 否则,返回 `false`。 ### 使用示例 ```java import java.util.regex.Pattern; public class Main { public static void main(String[] args) { String regex = "\\d+"; // 匹配一个或多个数字 String input1 = "12345"; String input2 = "abc123"; System.out.println(Pattern.matches(regex, input1)); // 输出 true System.out.println(Pattern.matches(regex, input2)); // 输出 false } } ``` 在上面的例子中,第一个输出为 `true`,因为 `"12345"` 完全由数字组成,符合正则表达式 `\d+`;第二个输出为 `false`,因为 `"abc123"` 包含非数字字符。 ### 注意事项 - `Pattern.matches` 是一个静态方法,可以直接通过 `Pattern` 类调用。 - 由于此方法尝试对整个字符串进行匹配,因此如果只需要检查字符串中是否存在匹配的部分,应该考虑使用 `Matcher.find()` 方法代替。 - 如果需要多次使用相同的正则表达式进行匹配,建议先使用 `Pattern.compile(regex)` 编译正则表达式并保存结果,以提高效率。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值