Java字符解析:将货币缩写转换为全称的实现问题
没问题,我来帮你搞定这个货币解析的需求!要实现任意货币输入转全称的功能,核心是用映射关系来管理符号和全称的对应,这样扩展性拉满,以后加新货币单位直接改映射就行,不用动核心逻辑。
解决方案
核心思路
- 用一个Map存储货币符号到全称的对应关系,方便快速查找和扩展;
- 拆分每个token的数字部分和符号部分(支持多位数,比如29C);
- 从Map中获取符号对应的全称,拼接成最终字符串;
- 处理边界情况(比如未知符号),避免程序报错。
完整代码示例
import java.util.HashMap; import java.util.Map; import java.util.regex.Matcher; import java.util.regex.Pattern; public class CurrencyParser { public void parseCurrency() { System.out.print('\u000c'); String currencyIn = "3$ 29C 3P 1H"; String[] tokens = currencyIn.split(" "); // 定义符号与全称的映射表,可随时添加新的货币单位 Map<String, String> currencyMap = new HashMap<>(); currencyMap.put("$", "dollars"); currencyMap.put("C", "cents"); currencyMap.put("P", "penny"); currencyMap.put("H", "hpenny"); StringBuilder resultBuilder = new StringBuilder(); // 正则表达式:匹配数字组(\\d+)和非数字符号组(\\D+) Pattern tokenPattern = Pattern.compile("(\\d+)(\\D+)"); for (String token : tokens) { Matcher matcher = tokenPattern.matcher(token); if (matcher.find()) { String quantity = matcher.group(1); String symbol = matcher.group(2); // 获取全称,未知符号直接保留原符号兜底 String fullName = currencyMap.getOrDefault(symbol, symbol); // 拼接结果,自动添加空格 resultBuilder.append(quantity) .append(" ") .append(fullName) .append(" "); } } // 移除末尾多余空格后输出 System.out.println(resultBuilder.toString().trim()); } public static void main(String[] args) { new CurrencyParser().parseCurrency(); } }
代码解释
- 映射表
currencyMap:这是整个功能的核心,所有符号和全称的对应都存在这里。比如以后要加"Q"代表"quarters",直接加一行currencyMap.put("Q", "quarters");就行,完全不用改循环逻辑。 - 正则拆分token:用
(\\d+)(\\D+)可以精准拆分数字和符号,不管是"3$"还是"100X"都能正确提取数量和符号,比手动遍历字符简洁可靠。 - 兜底处理:
getOrDefault方法确保遇到未知符号时,不会抛出空指针,而是直接保留原符号,程序稳定性更高。 - 高效拼接:用
StringBuilder代替字符串拼接,避免创建大量临时字符串,性能更好。
扩展优化:处理复数形式
如果想要更贴合语法,比如"3 penny"改成"3 pennies",可以加一段复数判断逻辑:
// 在获取fullName之后添加这段代码 if (!quantity.equals("1")) { // 根据实际货币单位的复数规则调整,这里举几个例子 switch (fullName) { case "penny": fullName = "pennies"; break; case "hpenny": fullName = "hpennies"; break; default: // 大部分单词直接加s if (!fullName.endsWith("s")) { fullName += "s"; } break; } }
这样运行后输出就会变成:3 dollars 29 cents 3 pennies 1 hpenny,更符合自然语言习惯。
内容的提问来源于stack exchange,提问作者Smurf1
相关产品推荐
相关产品推荐

