Java中如何提取特定格式子串并转换为数字字符串
Java实现:提取数字英文表述并转换为数字字符串
步骤1:提取数字英文子串
已知前缀your identification code is (注意末尾的空格)固定不变,直接通过前缀长度截取后续内容即可,也可以用分割方式获取目标部分:
String input = "your identification code is four zero two four three six"; String prefix = "your identification code is "; // 截取前缀之后的部分,trim处理可能的多余空格 String numEnglishPart = input.substring(prefix.length()).trim();
或者使用split方法:
String[] parts = input.split(prefix); String numEnglishPart = parts[1].trim();
步骤2:建立英文数字与阿拉伯数字的映射
创建一个Map存储0-9的英文与阿拉伯数字对应关系,用于快速查找转换:
Map<String, String> numMap = new HashMap<>(); numMap.put("zero", "0"); numMap.put("one", "1"); numMap.put("two", "2"); numMap.put("three", "3"); numMap.put("four", "4"); numMap.put("five", "5"); numMap.put("six", "6"); numMap.put("seven", "7"); numMap.put("eight", "8"); numMap.put("nine", "9");
步骤3:转换并拼接成目标字符串
将提取到的英文数字按空格分割为单词数组,遍历每个单词从映射表中取出对应数字,拼接成最终结果:
String[] numWords = numEnglishPart.split("\\s+"); // \\s+匹配任意数量空白字符,兼容多余空格 StringBuilder result = new StringBuilder(); for (String word : numWords) { // 可选:处理未知单词的异常情况 if (!numMap.containsKey(word)) { throw new IllegalArgumentException("无法识别的数字英文:" + word); } result.append(numMap.get(word)); } String finalCode = result.toString(); // 结果为"402436"
完整示例代码
整合所有步骤的可运行代码:
import java.util.HashMap; import java.util.Map; public class CodeConverter { public static void main(String[] args) { String input = "your identification code is four zero two four three six"; String prefix = "your identification code is "; // 提取数字英文部分 String numEnglishPart = input.substring(prefix.length()).trim(); // 初始化数字映射表 Map<String, String> numMap = new HashMap<>(); numMap.put("zero", "0"); numMap.put("one", "1"); numMap.put("two", "2"); numMap.put("three", "3"); numMap.put("four", "4"); numMap.put("five", "5"); numMap.put("six", "6"); numMap.put("seven", "7"); numMap.put("eight", "8"); numMap.put("nine", "9"); // 转换拼接为目标字符串 String[] numWords = numEnglishPart.split("\\s+"); StringBuilder result = new StringBuilder(); for (String word : numWords) { if (!numMap.containsKey(word)) { throw new IllegalArgumentException("无法识别的数字英文:" + word); } result.append(numMap.get(word)); } System.out.println(result.toString()); // 输出:402436 } }
补充说明
- 使用
split("\\s+")替代split(" "),可以兼容输入字符串中存在多个连续空格的情况 - 加入了未知单词的异常处理,避免出现
null值拼接导致的错误 - 注意前缀字符串末尾的空格,确保截取的数字英文部分准确
内容的提问来源于stack exchange,提问作者Niladri
相关产品推荐
相关产品推荐

