java提取字符串中的数值

String字符串:日单量:100 | 出厂价格:5000.0 | 销售价:57000.34 | 优惠价:200.00

public static String[] extractAmountMsg(String msg){
    String returnAmounts [] = new String [4];
    if(!msg.equals("")){
        msg = msg.replace(" | ", " ");
        String [] amounts = msg.split(" ");
        for(int i=0;i<amounts.length;i++){
            Pattern p=Pattern.compile("(\\d+\\.\\d+)");
            Matcher m=p.matcher(amounts[i]);
            if(m.find()){
                returnAmounts[i]=m.group(1)==null?"":m.group(1);
            }else{
                p=Pattern.compile("(\\d+)");
                m=p.matcher(amounts[i]);
                if(m.find()){
                    returnAmounts[i]=m.group(1)==null?"":m.group(1);
                }
            }
        }
    }else {
        returnAmounts[0]="0";
        returnAmounts[1]="0d";
        returnAmounts[2]="0d";
        returnAmounts[3]="0d";
    }

    return returnAmounts;
}
返回结果[100,5000.0,57000.34,200.00]

Java,有几种方法可以从字符串提取数字: 1. **正则表达式**: 使用`java.util.regex`包的`Pattern`和`Matcher`类,你可以使用正则表达式匹配并找到所有的数字。例如: ```java String str = "abc123def456"; Pattern pattern = Pattern.compile("\\d+"); Matcher matcher = pattern.matcher(str); List<String> numbers = new ArrayList<>(); while (matcher.find()) { numbers.add(matcher.group()); } ``` 这将返回一个包含所有连续数字的列表。 2. **`Integer.parseInt()`和`Character.isdigit()`**: 如果你知道字符串的数字都是单个字符,并且不会很大,可以直接遍历每个字符检查是否为数字: ```java String str = "abc123def456"; int index = 0; List<Integer> numberList = new ArrayList<>(); while (index < str.length()) { if (Character.isDigit(str.charAt(index))) { int num = Integer.parseInt(str.substring(index, index + 1)); numberList.add(num); index += 1; } else { index++; } } ``` 3. **`String.split()`** 和 `Integer.valueOf()`: 另外一种方式是通过逗号、空格等分隔符分割字符串,然后对结果进行解析: ```java String str = "a,1,b,2,c,3"; String[] parts = str.split(","); List<Integer> numbers = Arrays.stream(parts) .mapToInt(Integer::valueOf) .boxed() .collect(Collectors.toList()); ``` 请注意,以上方法处理的是整数。如果需要处理浮点数或其他类型的数值,你可能需要调整代码或使用更复杂的方法。同时,如果你的字符串有非数字字符混杂其,上述方法可能会失败或截断数据。在实际应用,务必考虑边界情况和错误处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值