<小白入门>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
上一篇下一篇

猜你喜欢

热点阅读