Java提取字符串中的数字:如何从指定格式字符串提取全部数字
嘿,这个需求很常见,用Java处理的话有几种简单实用的方案,我给你详细说说:
方案1:使用正则表达式(最简洁高效)
正则表达式是处理这类字符串提取问题的首选,直接匹配所有连续的数字序列就行。这里用\\d+来匹配一个或多个连续数字,具体代码如下:
import java.util.regex.Matcher; import java.util.regex.Pattern; public class ExtractNumbers { public static void main(String[] args) { String input = "(1234-5869)|990-9797"; // 定义匹配连续数字的正则模式 Pattern numberPattern = Pattern.compile("\\d+"); Matcher matcher = numberPattern.matcher(input); StringBuilder resultBuilder = new StringBuilder(); // 遍历所有匹配到的数字序列 while (matcher.find()) { if (resultBuilder.length() > 0) { resultBuilder.append(" "); // 用空格分隔不同的数字组 } resultBuilder.append(matcher.group()); } // 输出结果 System.out.println(resultBuilder.toString()); // 输出: 1234 5869 990 9797 } }
方案2:手动遍历字符(直观可控)
如果你不想依赖正则,也可以逐个检查字符串中的字符,把数字字符累积起来,遇到非数字时就把累积的数字加入结果:
public class ExtractNumbers { public static void main(String[] args) { String input = "(1234-5869)|990-9797"; StringBuilder currentNumber = new StringBuilder(); StringBuilder finalResult = new StringBuilder(); for (char ch : input.toCharArray()) { if (Character.isDigit(ch)) { // 如果是数字,就加入当前数字缓冲区 currentNumber.append(ch); } else { // 遇到非数字,且缓冲区有数字时,加入结果 if (currentNumber.length() > 0) { if (finalResult.length() > 0) { finalResult.append(" "); } finalResult.append(currentNumber); currentNumber.setLength(0); // 清空缓冲区 } } } // 处理字符串末尾可能剩下的数字 if (currentNumber.length() > 0) { if (finalResult.length() > 0) { finalResult.append(" "); } finalResult.append(currentNumber); } // 输出结果 System.out.println(finalResult.toString()); // 输出: 1234 5869 990 9797 } }
两种方法都能完美满足你的需求:正则方案代码更简洁,适合大多数场景;手动遍历的方式更直观,方便你在需要的时候对提取逻辑做更多自定义调整。
内容的提问来源于stack exchange,提问作者umang rastogi
相关产品推荐
相关产品推荐

