我试图解决Java的codingBat中的以下问题:
http://codingbat.com/prob/p121193

给定一个字符串,返回出现在字符串中的数字的总和,忽略所有其他字符。数字是连续的一系列1个或多个数字字符。 (注意:Character.isDigit(char)测试字符是否为字符“ 0”,“ 1”,..“ 9”之一。Integer.parseInt(string)将字符串转换为int。)
sumNumbers(“ abc123xyz”)→123
sumNumbers(“ aa11b33”)→44
sumNumbers(“ 7 11”)→18

下面是我的解决方案

public int sumNumbers(String str) {
  final int len=str.length();

  int[] numbers=new int[len];
  int count=0;
  String temp="";
  int sum=0;

  for(int i=0;i<len;i++)
  {
     if(Character.isDigit(str.charAt(i)))
     {
        temp=temp+str.substring(i, i+1);

        if(i==len-1)
        {
          numbers[count]=Integer.parseInt(temp);
          break;
         }
        if(Character.isDigit(str.charAt(i+1)))
        {
           continue;
        }
        else
        {
          numbers[count]=Integer.parseInt(temp);
          count++;
          temp="";
        }
     }

   }
   for(int j=0;j<numbers.length;j++)
   {
      sum=sum+numbers[j];
    }
    return sum;

}


这是一个简单的问题,请使用正则表达式或其他方式提供任何有效的替代答案,请不要使用任何收藏框架中的内容。

最佳答案

这是我的解决方案。与您的相似。

public int sumNumbers(String str) {
    int sPos = -1;
    int ePos = -1;
    int sum = 0;

    for (int i = 0; i < str.length(); i++) {
        char c = str.charAt(i);
        if (Character.isDigit(c)) {
            if (sPos < 0) {
                sPos = i;
                ePos = i;
            } else {
                ePos = i;
            }
        } else {
            sum = add(str, sum, sPos, ePos);
            sPos = -1;
        }
    }

    sum = add(str, sum, sPos, ePos);

    return sum;
}

private int add(String str, int sum, int sPos, int ePos) {
    if (sPos >= 0) {
        sum += Integer.parseInt(str.substring(sPos, ePos + 1));
    }
    return sum;
}

关于java - 备用CodingBat sumNumbers练习解,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20300671/

10-11 00:34