对字符串中的数字求和

时间:2018-02-16 20:44:53

标签: java

我编写了一个程序,用于对String中的int值求和。我虽然得到了错误的输出。我无法弄清楚这个问题。预期的输出应该是23和29,但我得到263和269.任何建议都会有所帮助;由于某种原因,它似乎在我的输出之间加了6。

public class ParseString
{
   String str;


   public ParseString(String x)
   {
      this.str = x;
   }


   public int sumOfAllDigits()
   {
      int total = 0;
      char[] arr = new char[this.str.length()];

      for(int i = 0; i < this.str.length(); i++)
      {
         arr[i] = this.str.charAt(i);
      }  

      for(int i = 0; i < arr.length; i++)
      {

         if(arr[i] >= '0' && arr[i] <= '9')
         {
            total = total + arr[i];
         }

      } 

      return total;

   }


public class TestParseString
{
   public static void main(String[] args)
   {
      String s1 = "AB458JK2L#4";
      ParseString ps1 = new ParseString(s1);
      System.out.println("Sum of all digits in \"" + s1 + "\" is: ");
      System.out.println(ps1.sumOfAllDigits());
      System.out.println();

      String s2 = "8927KL3PY";
      ParseString ps2 = new ParseString(s2);
      System.out.println("Sum of all digits in \"" + s2 + "\" is: ");
      System.out.println(ps2.sumOfAllDigits());
   }
}

2 个答案:

答案 0 :(得分:2)

并不是6插入你的总和;这是你的总和240太高了。每个测试字符串中有5位数字。这里缺少的是charint之间转换的内容。 '0'不是0;当char加宽到int进行求和时,它采用ASCII值,对于数字,这是代表的数字加上48。 '0' - &gt; 48'1' - &gt; 49等等。

额外48次增加5次会产生额外的240

由于数字是按'0' 48开头的顺序编码的,因此您可以减去'0'以取走不需要的数字。

total = total + arr[i] - '0';

顺便说一句,正如在问题评论中已经提到的那样,toCharArray()比手动复制每个字符更容易让char[] String

答案 1 :(得分:0)

问题在于:

total = total + arr[i];

arr[i]char。当你对它使用+运算符时,如果另一个操作数是int,你实际上是在添加字符的ASCII值,对于0到9,它是48到57。

你认为你这样做:

4 + 5 + 8 + 2 + 4

但实际上程序正在做:

52 + 53 + 56 + 50 + 52

这就是为什么你得到如此大的数字。

您需要解析字符以获得正确的输出。一种方法是减去48!

total = total + (arr[i] - 48);

或者您可以先将其转换为字符串,然后将其解析为int

total = total + Integer.parseInt(Character.toString(arr[i]));