【问题标题】:How to extract number and String in java如何在java中提取数字和字符串
【发布时间】:2010-10-06 11:11:06
【问题描述】:

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

字符串形式-

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

输出应该像 - 10,hello,world

谢谢

【问题讨论】:

  • 全部用逗号分隔?
  • 我相信正则表达式可以解决问题。

标签: java


【解决方案1】:

解决你的问题:

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

【讨论】:

  • 谢谢你,Qwerky。非常感谢。
【解决方案2】:
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.);
 }

【讨论】:

  • @Chankey 是的,这是错字。谢谢
  • 很抱歉投了反对票……在这种特殊情况下,它似乎是合法的……但感谢您的更新。 +1
【解决方案3】:
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

【讨论】:

  • 依靠异常来控制程序流不是一种不好的做法吗?否则,它看起来像是一个非常简单的解决方案,几乎没有意外的复杂性。
  • @vstoyanov 讨论了那个具体案例(解析数字/日期),让我找到它。一般来说,是的,依赖异常是一种不好的做法,但是因为没有方法来验证可解析性..
  • for (String part : parts) 请详细说明此语句的作用。
  • 这是 Java 5 中引入的 foreach 循环。它循环数组/集合的所有元素
【解决方案4】:

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

/**
 * 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,这显然不起作用。

【讨论】:

    猜你喜欢
    • 2020-06-10
    • 2012-05-13
    • 1970-01-01
    • 2018-10-25
    • 1970-01-01
    • 1970-01-01
    • 2019-10-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多