随机字符串中的整数之和

时间:2015-09-04 04:16:58

标签: java string random

今天我收到了这个面试问题。有人可以帮我解决一下吗?

/**
 * Return the sum of all integers from a random string. Continuous Integers must be considered as one number. 
 * Given the following inputs, we expect the corresponding output:
 * 
 * "1a2b3c"  ==>6 (1+2+3)
 * "123ab!45c" ==> 168 (123+45)
 * "abcdef" ==> 0 (no integers in String)
 * "0123.4" ==> 127 (0123+4)
 * "dFD$#23++++12@#T1234;/..10" => 1279 (23+12+1234+10)
 * "12a-10b" => 2 (12-10)
 */

private static long SumOfNumbers (String str){
    return null;

3 个答案:

答案 0 :(得分:0)

当您没有尝试任何研究时,我们无法为您提供整体解决方案。但要提示如何解决,

  • 使用扫描仪阅读输入
  • 使用正则表达式从读取输入中删除除数学运算符之外的非数字

这应该是你应该做的事情的方法。那么你是怎么做到的。尝试研究,然后在出现技术问题时发布问题。

答案 1 :(得分:0)

您可以逐个字符地执行此操作,只需累积数字(和符号)并在检测到数字结束时对它们求和。

算法会是这样的:

 $urlRouterProvider.when('', '/resources/listView/kristin');

基本上,如果你得到一个数字,你可以将它添加到累加器(用于构建当前数字)。

每当你发现一个带有非零累加器的非数字时,你将累加器添加到总数中,并根据当前字符是set sign to 1. set total to 0. set accum to 0. for each character: if character is digit: accum = accum * 10 + value(character) elif accum > 0: total = total + sign * accum accum = 0 if character is '-': sign = -1 else: sign = 1 else: if character is '-': sign = -sign if accum > 0: total = total + sign * accum 还是其他东西设置符号(但它不能是此时的数字)。

如果您在累加器中没有非数字且没有任何内容,则只需将-个符号作为特殊情况处理,以便选择-之类的内容作为--10

最后,您再次添加一个非零累加器,以考虑您可能以数字结尾。

答案 2 :(得分:0)

尝试以下代码

private static long SumOfNumbers(String str) {
    int digit = 0, number = 0;
    long sum = 0;
    // Iterate through each character in the input string
    for (int i = 0; i < str.length(); i++) {

        // Convert the character to integer
        digit = Integer.valueOf(str.charAt(i)) - '0';

        // Check if the character is a integer
        // add the digits till a non-integer is encountered
        if (digit >= 0 && digit <= 9) {
            number = number * 10 + digit;
        } else {
            sum += number;
            number = 0;
        }
    }
    sum += number;
    return sum;
}