String与正则表达式

字符串广泛应用 在 Java 编程中,在 Java 中字符串属于对象,Java 提供了 String 类来创建和操作字符串。

matches(String regex)

此方法用来测试当前字符串是否匹配给定的正则表达式。 调用此方法的 str.matches(regex) 形式与以下表达式产生的结果完全相同: 

Pattern.matches(regex, str)

实例:验证正则表达式是否匹配 “Hello World” 文本,代码如下:

public class Demo23 {

    public static void main(String[] args) {
        String str = "Hello World";
        System.out.println(str.matches("((Hello)\\s(World))"));
    }

}

运行结果如下:

true

split(String regex, int limit)

根据匹配给定的正则表达式来拆分此字符串。

此方法返回的数组包含此字符串的子字符串,每个子字符串都由另一个匹配给定表达式的子字符串终止,或者由此字符串末尾终止。数组中的子字符串按它们在此字符串中出现的顺序排列。如果表达式不匹配输入的任何部分,那么所得数组只具有一个元素,即此字符串。

limit 参数控制模式应用的次数,因此影响所得数组的长度。

如果该 limit 大于 0,则模式将被最多应用 limit - 1 次,数组的长度将不会大于 limit,而且数组的最后一项将包含所有超出最后匹配的定界符的输入。

如果 limit 为非正,那么模式将被应用尽可能多的次数,而且数组可以是任何长度。

如果 limit 为 0,那么模式将被应用尽可能多的次数,数组可以是任何长度,并且结尾空字符串将被丢弃。

调用此方法的 str.split(regex, n) 形式与以下表达式产生的结果完全相同:

Pattern.compile(regex).split(str, n)

注意:只有一个参数的 split(regex) 方法内部实际调用的是 split(regex, 0);

例如:使用正则表达式拆分字符串 "boo:and:foo",代码如下:

import java.util.Arrays;

public class Demo24 {

    public static void main(String[] args) {
        String str = "boo:and:foo";
        System.out.println(Arrays.toString(str.split(":")));
        System.out.println(Arrays.toString(str.split("o")));
        System.out.println(Arrays.toString(str.split("o", 5)));
    }

}

运行结果如下:

boo, and, foo]
[b, , :and:f]
[b, , :and:f, , ]

replaceFirst(String regex, String replacement)

使用给定的 replacement 替换此字符串匹配给定的正则表达式的第一个子字符串。

调用此方法的 str.replaceFirst(regex, repl) 形式与以下表达式产生的结果完全相同: 

Pattern.compile(regex).matcher(str).replaceFirst(repl)

注意:在替代字符串中使用反斜杠 (\) 和美元符号 ($) 与将其视为字面值替代字符串所得的结果可能不同;请参阅 Matcher 类的 replaceFirst(java.lang.String) 方法。如有需要,可使用 Matcher.quoteReplacement(java.lang.String) 取消这些字符的特殊含义。

实例:

public class Demo25 {

    public static void main(String[] args) {
        String str = "boo:and:foo";
        // 将第一个字符串 o 替换成 ##
        System.out.println(str.replaceFirst("o+", "##"));
    }

}

运行结果如下:

b##:and:foo

replaceAll(String regex, String replacement)

使用给定的 replacement 替换此字符串所有匹配给定的正则表达式的子字符串。 

调用此方法的 str.replaceAll(regex, repl) 形式与以下表达式产生的结果完全相同: 

Pattern.compile(regex).matcher(str).replaceAll(repl)

注意:在替代字符串中使用反斜杠 (\) 和美元符号 ($) 与将其视为字面值替代字符串所得的结果可能不同;请参阅 Matcher 类的 replaceFirst(java.lang.String) 方法。如有需要,可使用 Matcher.quoteReplacement(java.lang.String) 取消这些字符的特殊含义。

实例

public class Demo26 {

    public static void main(String[] args) {
        String str = "boo:and:foo";
        // 将所有的 o 字符替换成 ##
        String newStr = str.replaceAll("o+", "\\$");
        System.out.println("newStr = " + newStr);

        // quoteReplacement() 方法将转换字符串
        // 斜线 ('\') 和美元符号 ('$') 将不具有任何特殊意义
        newStr = Matcher.quoteReplacement(newStr);
        System.out.println("newStr = " + newStr);
    }

}

运行结果如下:

newStr = b$:and:f$
newStr = b\$:and:f\$
说说我的看法
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
公众号