我想提取数字,并使用Java添加这些数字,字符串保持不变。
字符串为 -
String msg="1,2,hello,world,3,4";
输出应该像-10,你好,世界
由于
答案 0 :(得分:5)
解决你的问题:
答案 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
,这将无效。