杰瑞科技汇

从字符串中提取数字 java

从字符串中提取数字的Java方法

在Java中,有几种方法可以从字符串中提取数字,以下是几种常用的实现方式:

使用正则表达式

这是最灵活和强大的方法:

import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class ExtractNumbers {
    public static List<Integer> extractNumbers(String str) {
        List<Integer> numbers = new ArrayList<>();
        Pattern pattern = Pattern.compile("\\d+"); // 匹配一个或多个数字
        Matcher matcher = pattern.matcher(str);
        while (matcher.find()) {
            numbers.add(Integer.parseInt(matcher.group()));
        }
        return numbers;
    }
    public static void main(String[] args) {
        String input = "abc123def45gh6";
        List<Integer> numbers = extractNumbers(input);
        System.out.println(numbers); // 输出: [123, 45, 6]
    }
}

使用Java 8 Stream API

import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
public class ExtractNumbersStream {
    public static List<Integer> extractNumbers(String str) {
        Pattern pattern = Pattern.compile("\\d+");
        Matcher matcher = pattern.matcher(str);
        return matcher.results()
                .map(m -> Integer.parseInt(m.group()))
                .collect(Collectors.toList());
    }
    public static void main(String[] args) {
        String input = "abc123def45gh6";
        List<Integer> numbers = extractNumbers(input);
        System.out.println(numbers); // 输出: [123, 45, 6]
    }
}

手动遍历字符串

如果不使用正则表达式,可以手动遍历字符串:

import java.util.ArrayList;
import java.util.List;
public class ExtractNumbersManual {
    public static List<Integer> extractNumbers(String str) {
        List<Integer> numbers = new ArrayList<>();
        StringBuilder currentNumber = new StringBuilder();
        for (char c : str.toCharArray()) {
            if (Character.isDigit(c)) {
                currentNumber.append(c);
            } else if (currentNumber.length() > 0) {
                numbers.add(Integer.parseInt(currentNumber.toString()));
                currentNumber.setLength(0);
            }
        }
        // 添加最后一个数字(如果字符串以数字结尾)
        if (currentNumber.length() > 0) {
            numbers.add(Integer.parseInt(currentNumber.toString()));
        }
        return numbers;
    }
    public static void main(String[] args) {
        String input = "abc123def45gh6";
        List<Integer> numbers = extractNumbers(input);
        System.out.println(numbers); // 输出: [123, 45, 6]
    }
}

提取浮点数

如果需要提取浮点数,可以修改正则表达式:

import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class ExtractFloats {
    public static List<Double> extractFloats(String str) {
        List<Double> numbers = new ArrayList<>();
        Pattern pattern = Pattern.compile("\\d+\\.\\d+"); // 匹配浮点数
        Matcher matcher = pattern.matcher(str);
        while (matcher.find()) {
            numbers.add(Double.parseDouble(matcher.group()));
        }
        return numbers;
    }
    public static void main(String[] args) {
        String input = "abc123.45def6.78gh9";
        List<Double> numbers = extractFloats(input);
        System.out.println(numbers); // 输出: [123.45, 6.78]
    }
}

注意事项

  1. 正则表达式 \\d+ 匹配一个或多个数字字符
  2. 如果字符串中包含负数,可以使用 "-?\\d+" 作为正则表达式
  3. 对于非常大的数字,可能需要使用 LongBigInteger 而不是 Integer
  4. 如果字符串格式复杂,可能需要更复杂的正则表达式

选择哪种方法取决于你的具体需求和性能考虑,正则表达式通常是最简洁和灵活的解决方案。

分享:
扫描分享到社交APP
上一篇
下一篇