Java 正则表达式提取数字

Java 正则表达式提取数字

Java 编程中,经常需要从字符串中提取数字,这时候正则表达式就能派上用场。本文将介绍 Java 正则表达式的基本用法以及如何通过正则表达式提取数字。

什么是正则表达式

正则表达式是一种用于匹配字符串的模式,它由特殊字符和普通字符组成。在原始文本中查找特定模式的过程中,正则表达式使用预定义的元字符来组成模式。

Java 正则表达式基础

在 Java 程序中使用正则表达式,需要通过 java.util.regex 包提供的类实现。常用的类有 PatternMatcher

具体使用步骤可以简述为:

  1. 创建一个正则表达式 Pattern 对象。
  2. 通过 Pattern 对象创建一个 Matcher 对象。
  3. 使用 Matcher 对象执行相关操作。

下面的示例演示了如何使用正则表达式查找数字:

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

public class RegexExample {
    public static void main(String[] args) {
        String text = "There are 123 apples and 45 pears.";

        // 创建将用于匹配数字的正则表达式对象
        Pattern pattern = Pattern.compile("\\d+");

        // 在文本中查找数字
        Matcher matcher = pattern.matcher(text);
        while (matcher.find()) {
            System.out.println("Number found: " + matcher.group());
        }
    }
}

在上面的代码中,我们首先使用 Pattern.compile("\\d+") 创建了一个正则表达式对象,该对象匹配一个或多个数字。接着,我们使用 matcher 对象去匹配 text ,并在匹配成功后输出结果。运行上述代码,结果如下:

Number found: 123
Number found: 45

如果想找到具体位置,可以通过 startend 方法获得位置信息:

while (matcher.find()) {
    System.out.println("Number found at index: " + matcher.start() + "-" + matcher.end());
}

该代码的运行结果如下:

Number found at index: 10-13
Number found at index: 24-26

另外,需要注意,正则表达式的匹配默认是贪婪匹配,即会尽可能多地匹配。如果要非贪婪匹配,可以在正则表达式后加上 ? ,如 \\d+? 就表示非贪婪匹配。

提取多个数字

如果要提取多个数字,可以使用类似于 \\d+ 的正则表达式,通过 while 循环查找所有数字:

String text = "1 23 456 7890";
Pattern pattern = Pattern.compile("\\d+");

Matcher matcher = pattern.matcher(text);
while (matcher.find()) {
    System.out.println(matcher.group());
}

该代码的运行结果如下:

1
23
456
7890

提取小数

如果要提取小数,可以使用类似于 \\d+\\.\\d+ 的正则表达式,其中 \\. 表示小数点:

String text = "The price is 1.234 dollars.";
Pattern pattern = Pattern.compile("\\d+\\.\\d+");

Matcher matcher = pattern.matcher(text);
if (matcher.find()) {
    System.out.println(matcher.group());
}

该代码的运行结果为:

1.234

提取负整数

如果要提取负整数,可以使用类似于 -[1-9]\\d* 的正则表达式:

String text = "The temperature is -10 degrees Celsius.";
Pattern pattern = Pattern.compile("-[1-9]\\d*");

Matcher matcher = pattern.matcher(text);
if (matcher.find()) {
    System.out.println(matcher.group());
}

该代码的运行结果为:

-10

提取带符号的整数

如果要提取带符号的整数,可以使用类似于 [+-]?\\d+ 的正则表达式,其中 \\? 表示可选的符号:

String text = "The gain is +20, and the loss is -15.";
Pattern pattern = Pattern.compile("[+-]?\\d+");

Matcher matcher = pattern.matcher(text);
while (matcher.find()) {
    System.out.println(matcher.group());
}

该代码的运行结果为:

+20
-15

提取科学计数法表示的数字

如果要提取科学计数法表示的数字,可以使用类似于 [+-]?\\d+\\.?\\d*e[+-]?\\d+ 的正则表达式:

String text = "The speed of light is 2.998e8 meters per second.";
Pattern pattern = Pattern.compile("[+-]?\\d+\\.?\\d*e[+-]?\\d+");

Matcher matcher = pattern.matcher(text);
if (matcher.find()) {
    System.out.println(matcher.group());
}

该代码的运行结果为:

2.998e8

提取 IP 地址

如果要提取 IP 地址,可以使用类似于 (\\d{1,3}\\.){3}\\d{1,3} 的正则表达式:

String text = "The server's IP address is 192.168.0.1.";
Pattern pattern = Pattern.compile("(\\d{1,3}\\.){3}\\d{1,3}");

Matcher matcher = pattern.matcher(text);
if (matcher.find()) {
    System.out.println(matcher.group());
}

该代码的运行结果为:

192.168.0.1

结论

本文介绍了 Java 正则表达式的基础知识,包括如何创建 Pattern 和 Matcher 对象、如何获取匹配结果等内容。此外,还提供了一些带符号数字、小数、科学计数法、IP 地址等的示例,以便读者更好地掌握。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程