Java 正则表达式提取数字
在 Java 编程中,经常需要从字符串中提取数字,这时候正则表达式就能派上用场。本文将介绍 Java 正则表达式的基本用法以及如何通过正则表达式提取数字。
什么是正则表达式
正则表达式是一种用于匹配字符串的模式,它由特殊字符和普通字符组成。在原始文本中查找特定模式的过程中,正则表达式使用预定义的元字符来组成模式。
Java 正则表达式基础
在 Java 程序中使用正则表达式,需要通过 java.util.regex 包提供的类实现。常用的类有 Pattern
和 Matcher
。
具体使用步骤可以简述为:
- 创建一个正则表达式
Pattern
对象。 - 通过
Pattern
对象创建一个Matcher
对象。 - 使用
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
如果想找到具体位置,可以通过 start
和 end
方法获得位置信息:
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 地址等的示例,以便读者更好地掌握。