<小白入门>Pattern的使用
2018-11-16 本文已影响0人
小马要加油
hi
虽然来简书2年了,看过很多文章,但是从来没有写过一篇文章。如今我也参与工作了,这个博客用来记录踩得一些坑和心得吧。
第一篇内容
private static void test(){
//需要匹配的字符串
String str = " <dimen name=\"text_size_14sp\">14sp</dimen>";
//正则表达式初始化。用()表示我们要获取的值
//[^"]匹配除引号之外的其他值 ([^<]+)匹配除<的其他值
Pattern pattern = Pattern.compile("<dimen name=\"[^\"]+\">([^<]+)</dimen>");
//匹配
Matcher m = pattern.matcher(str);
//是否找到
while (m.find()){
System.out.println(str);
//m.group(1)表示取到pattern的第一个()的值。m.group(0)表示全部
//将他的匹配到的最后一个替换成我们要的值
str = str.replace(m.group(1),"a");
System.out.println(str);
}
}
/**
* 获取匹配到的最后一个值
* @param text 要匹配的字符串
* @param regex 正则表达式
* @param replacement 代替的字符串
* @return
*/
public static String replaceLast(String text, String regex, String replacement) {
return text.replaceFirst("(?s)"+regex+"(?!.*?"+regex+")", replacement);
}
随笔
这个东西加以修改,就可以用在转换dimen上了。我就是用来转换dimen的,但是这边遇到一个坑。
<dimen name="text_size_14sp">14sp</dimen>
有个同事写的这个,让我差点编译不过。因为replace会将所有匹配到的值进行替换。比如这个匹配的是14sp,那么输出就变成
<dimen name="text_size_a">a</dimen>
所以需要再次处理这边有两个办法
一是找不同,看看这两个14sp有什么区别。这边可以注意到第2个前面有个>,所以
string = string.replace(">"+dimen, ">"+String.format("%.0f%s", value, suffix));
这样也可以。
二、获取匹配的最后一个
/**
* 获取匹配到的最后一个值
* @param text 要匹配的字符串
* @param regex 正则表达式
* @param replacement 代替的字符串
* @return
*/
public static String replaceLast(String text, String regex, String replacement) {
return text.replaceFirst("(?s)"+regex+"(?!.*?"+regex+")", replacement);
}
str = replaceLast(str,m.group(1),"a");
这样就可以了。
7bb47974ccbd491aaabaa92e1fcaa3b7.png