如何在java中提取数字和字符串

时间:2010-10-06 11:11:07

标签: java

我想提取数字,并使用Java添加这些数字,字符串保持不变。

字符串为 -

String msg="1,2,hello,world,3,4";

输出应该像-10,你好,世界

由于

4 个答案:

答案 0 :(得分:5)

解决你的问题:

  1. 解析为令牌
  2. 将令牌转换为对象
  3. 操作对象

答案 1 :(得分:5)

String pieces[] = msg.split(",");  
int sum=0;
StringBuffer sb = new StringBuffer();
for(int i=0;i < pieces.length;i++){

      if(org.apache.commons.lang.math.NumberUtils.isNumber(pieces[i])){
             sb.appendpieces[i]();
      }else{
             int i = Integer.parseInt(pieces[i]));
             sum+=i;    
      }

 }
 System.out.println(sum+","+sb.);
 }

答案 2 :(得分:1)

String[] parts = msg.split(",");
int sum = 0;
StringBuilder stringParts = new StringBuilder();
for (String part : parts) {
    try {
        sum += Integer.parseInt(part);
    } catch (NumberFormatException ex) {
        stringParts.append("," + part);
    }
}
stringParts.insert(0, String.valueOf(sum));

System.out.println(stringParts.toString()); // the final result

请注意,应该几乎总是避免使用异常作为控制流的上述做法。这个具体案例我认为是一个例外,因为没有方法可以验证字符串的“可解析性”。如果有Integer.isNumber(string),那么这就是要走的路。实际上,您可以创建这样的实用方法。检查this question

答案 3 :(得分:0)

这是一个非常简单的正则表达式版本:

/**
 * Use a constant pattern to skip expensive recompilation.
 */
private static final Pattern INT_PATTERN = Pattern.compile("\\d+",
    Pattern.DOTALL);

public static int addAllIntegerOccurrences(final String input){
    int result = 0;
    if(input != null){
        final Matcher matcher = INT_PATTERN.matcher(input);
        while(matcher.find()){
            result += Integer.parseInt(matcher.group());
        }
    }
    return result;

}

测试代码:

public static void main(final String[] args){
    System.out.println(addAllIntegerOccurrences("1,2,hello,world,3,4"));
}

<强>输出:

  

10

<强>注意事项:

如果数字加起来大于Integer.Max_VALUE,这将无效。