Java字符串正则处理

Java字符串正则处理

内容简介

  1. Java 正则处理常用模式字符
  2. 字符串文本匹配,即调用模式类 Pattern 和匹配器类 Matcher
  3. 字符串替换,即 String 的实例方法 replaceAll()
  4. 字符串分割
  5. 增强 for 循环 ( for each 循环)

Java字符串正则处理

正则表达式具有强大的文本匹配功能。JDK正则包 java.util.regex 包含模式类 Pattern 和匹配器类 Matcher ,使用正则表达式所订制的模式对字符串进行匹配。通过查看源码可知,String 的正则处理实质上是调用模式类 Pattern 和匹配器类 Matcher

Java 正则处理常用模式字符

Java 正则处理常用模式字符

增强型for循环。

增强 for 循环 (也称 for each 循环) 是迭代器遍历方法的一个“简化版”,是JDK1.5以后出来的一个高级for循环,专门用来遍历数组和集合。

其内部原理是一个 Iteration 迭代器,在遍历数组/集合的过程中,不能对集合中的元素进行增删操作。

 for(变量类型 变量名:集合对象) {

         // 循环体

 }
注意的事项

1.增强for循环底层也是使用了迭代器获取的,在使用增强for循环遍历元素的过程中不准使用集合对象对集合的元素个数进行修改。

2.迭代器与增强for循环遍历元素的区别:使用增强for循环遍历集合的元素时,不能调用迭代器的remove方法删除元素,而使用迭代器遍历集合的元素时可以删除集合的元素。

3.增强for循环和普通for循环的区别:普通for循环可以没有遍历的目标,而增强for循环一定要有遍历的目标。

实验要求

(1)新建类 RegexDemo ,并创建 main() 方法体。

(2)在 main() 方法体内,使用 Pattern.matches() 并编写正则表达式,匹配中国省会城市的电话号码。即:
0aa-dddddddd。其中,以数字0打头,aa是城市区号,dddddddd 是8位电话号码。

(3)新建方法 testRegex2() ,并添加注解 @Test

(4)在方法体内,使用类 String 的实例方法 replaceAll() ,获取手机归属地查询的有效信息(【1552764】湖北武汉湖北联通GSM卡,即过滤了无效的 xml 标签信息)。

提示:需要正则处理的 xml 文档的内容如下:

String source="<?xml version=\"1.0\"encoding=\"utf-8\"?>\n"+

"<stringxmlns=\"http://WebXml.com.cn/\">【1552764】湖北武汉湖北联通GSM卡</string>";

(5)创建一个值为 Java,Java EE,Android 的字符串对象 courses ,对它应用String 的实例方法 split(),分离出3门课程得到一个字符串数组后,使用增强型 for 循环遍历该字符串数组

代码参考

1. 新建类 RegexDemo ,并创建 main() 方法体。

// 新建类RegexDemo,并创建main()方法体。
public class RegexDemo {
    public static void main(String[] args) {
        
    }
}

2. 在 main() 方法体内,使用 Pattern.matches() 并编写正则表达式,匹配中国省会城市的电话号码。

    public static void main(String[] args) {
        // 在main()方法体内,使用Pattern.matches()并编写正则表达式,匹配中国省会城市的电话号码。
        // 创建一个Scanner类型的对象scanner。
        System.out.println("请输入中国省会城市的电话号码: ");
        Scanner scanner = new Scanner(System.in);
        String phoneNumber = scanner.nextLine();
        // 静态方法Pattern.matches(正则表达式,字符串)用于测试字符串是否匹配正则表达式
        if (Pattern.matches("0\\d{10}", phoneNumber)) {
            System.out.println("号码正确!");
        } else {
            System.out.println("号码输入有误!");
        }
    }

3. 新建方法 testRegex2() ,并添加注解 @Test

首先在项目的pom.xml里,添加JUnit测试依赖
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.12</version>
    </dependency>
  </dependencies>
新建方法 testRegex2() ,添加注解 @Test
    @Test
    public void testRegex2() {
    }

4. 在方法体内,使用类 String 的实例方法 replaceAll() ,获取手机归属地查询的有效信息

    @Test
    public void testRegex2() {
        // 在方法体内,使用类String的实例方法replaceAll(),获取手机归属地查询的有效信息
        String source = "<?xml version=\"1.0\"encoding=\"utf-8\"?>\n" +
                "<stringxmlns=\"http://WebXml.com.cn/\">【1552764】湖北武汉湖北联通GSM卡</string>";
        // 从<或</开始到>结束的若干字符替换为空串。
        String result = source.replaceAll("</?[^>]+>", "").trim();   //正则处理
        System.out.println(result);  //输出:【1552764】湖北武汉湖北联通GSM卡
    }

5. 创建一个值为 Java,Java EE,Android 的字符串对象 courses ,对它应用String 的实例方法 split(),分离出3门课程得到一个字符串数组后,使用增强型 for 循环遍历该字符串数组

        // 创建一个值为"Java,Java EE,Android"的字符串对象courses
        String course = "Java,Java EE,Android";
        // 对它应用String的实例方法split()
        String[] courseArray = course.split(","); // 字符串分割

        for (String aCourse : courseArray) {
            System.out.println(aCourse);
        }

完整代码

package unit02;

// (1)新建类RegexDemo,并创建main()方法体。
// (2)在main()方法体内,使用Pattern.matches()并编写正则表达式,匹配中国省会城市的电话号码。即:
//     0aa-dddddddd。其中,以数字0打头,aa是城市区号,dddddddd是8位电话号码。
// (3)新建方法testRegex2(),并添加注解@Test。
// (4)在方法体内,使用类String的实例方法replaceAll(),获取手机归属地查询的有效信息(【1552764】湖北武汉湖北联通GSM卡,即过滤了无效的xml标签信息)。
//     提示:需要正则处理的xml文档的内容如下:
//     String source="<?xml version=\"1.0\"encoding=\"utf-8\"?>\n"+
//     "<stringxmlns=\"http://WebXml.com.cn/\">【1552764】湖北武汉湖北联通GSM卡</string>";
// (5)创建一个值为"Java,Java EE,Android"的字符串对象courses,对它应用String的实例方法split(),
//     分离出3门课程得到一个字符串数组后,使用增强型for循环遍历该字符串数组

import org.junit.Test;

import java.util.Scanner;
import java.util.regex.Pattern;

// 新建类RegexDemo,并创建main()方法体。
public class RegexDemo {
    public static void main(String[] args) {
        // 在main()方法体内,使用Pattern.matches()并编写正则表达式,匹配中国省会城市的电话号码。
        // 创建一个Scanner类型的对象scanner。
        System.out.println("请输入中国省会城市的电话号码: ");
        Scanner scanner = new Scanner(System.in);
        String phoneNumber = scanner.nextLine();
        // 静态方法Pattern.matches(正则表达式,字符串)用于测试字符串是否匹配正则表达式
        if (Pattern.matches("0\\d{10}", phoneNumber)) {
            System.out.println("号码正确!");
        } else {
            System.out.println("号码输入有误!");
        }

        // 创建一个值为"Java,Java EE,Android"的字符串对象courses
        String course = "Java,Java EE,Android";
        // 对它应用String的实例方法split()
        String[] courseArray = course.split(","); // 字符串分割

        for (String aCourse : courseArray) {
            System.out.println(aCourse);
        }
    }

    @Test
    public void testRegex2() {
        // 在方法体内,使用类String的实例方法replaceAll(),获取手机归属地查询的有效信息
        String source = "<?xml version=\"1.0\"encoding=\"utf-8\"?>\n" +
                "<stringxmlns=\"http://WebXml.com.cn/\">【1552764】湖北武汉湖北联通GSM卡</string>";
        // 从<或</开始到>结束的若干字符替换为空串。
        String result = source.replaceAll("</?[^>]+>", "").trim();   //正则处理
        System.out.println(result);  // 输出:【1552764】湖北武汉湖北联通GSM卡
    }
}


参考书目:吴志祥《JAVA编程技术》

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值