【问题标题】:Converting String number to integer array将字符串数字转换为整数数组
【发布时间】:2015-02-20 13:40:52
【问题描述】:

我想将一个数字作为字符串读取,并将其字符拆分为一个整数数组,并通过循环遍历该整数数组来找到它的数字之和。

这是我目前的代码:

public static void main(String[] args) {
    Scanner S = new Scanner(System.in);
    String Number = S.next();
    int counterEnd = Number.length();
    int sum = 0 ;

    for ( int i = 0 ; i < counterEnd ; i++) {
         sum += sum + (Number.charAt(i));
    }

    System.out.println(sum);
}

不幸的是,这段代码打印的是 ASCII 的总和而不是数字。

【问题讨论】:

    标签: java arrays split type-conversion


    【解决方案1】:

    您可以减去'0' 字符(即'1' - '0'49 - 48 = 1):

    sum += Number.charAt(i) - '0';
    

    【讨论】:

    • 这种技术是经典的方法,但我不喜欢依赖字符表的隐式排序。它只是感觉有点笨拙,或者至少低于像 Java 这样的 OO 语言应该处理的抽象级别。不过这会起作用,因为 ASCII 表可能永远不会被重新定义。
    【解决方案2】:

    @August 建议您可以减去字符 '0' 以获得字符的数值(我觉得这种方法有点骇人听闻)。或者您可以使用Character.getNumericValue 来实现:

    sum += Character.getNumericValue(Number.charAt(i)); //note it's sum += theDigit; not sum += sum + theDigit
    

    您可能还想查看增强的 for 循环,因为这里基本上不需要索引:

    for(char c : Number.toCharArray()) {
        sum += Character.getNumericValue(c);
    }
    

    从 Java 8 开始,您也可以这样做:

    int sum = Number.chars().map(Character::getNumericValue).sum();
    

    它基本上得到String中字符的Stream,将每个字符映射到其对应的数值并求和。

    【讨论】:

      【解决方案3】:
      sum+= Integer.parseInt(String.valueOf(Number.charAt(i)));
      

      【讨论】:

        【解决方案4】:

        你可以这样做:

           public static void main(String[] args) {
             Scanner S = new Scanner(System.in);
             String n = S.next();
             int sum = 0;
        
             for (int i = 0; i < n.length(); i++) {
               sum += Integer.parseInt(n.substring(i, i+1));
             }
        
             System.out.println(sum);
           }
        

        注意:将 for 循环的主体替换为:

        int offset = (n.substring(i, i+1).equals("-")) ? 1 : 0;
        sum += Integer.parseInt(n.substring(i, i+1+offset));
        i+=offset;
        

        将允许程序采用负数。例如:输入

        -24
        

        会返回一个正数 2。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-07-04
          • 1970-01-01
          • 1970-01-01
          • 2019-04-21
          相关资源
          最近更新 更多