繁体   English   中英

将写入字符串的整数求和

[英]Sum Integers written into a String

我用了

int num = Integer.parseInt(str)

将整数值写入字符串。我需要一个函数从给定字符串中读取这些值并计算它们的总和。

示例:输入 - “43 68 9 23 318” 输出 - 461

String str = "43 68 9 23 318";
int num = Integer.parseInt(str)

您正在做的是,尝试一次解析完整的输入字符串,这将抛出NumberFormatException 您需要先将其拆分,然后对每个返回的String执行求和。


whitespace拆分输入字符串,然后解析每个数字并执行求和。

public static void main(String[] args) {
  String input = "43 68 9 23 318";
  String numbers[] = input.split("\\s+");   // Split the input string.
  int sum = 0;
  for (String number : numbers) {  // loop through all the number in the string array
    Integer n = Integer.parseInt(number);  // parse each number
    sum += n;     // sum the numbers
  }
  System.out.println(sum);  // print the result.
}

在 Java 8 中,使用流

String input = "43 68 9 23 318";
String numbers[] = input.split("\\s+");
int[] nums = Arrays.stream(numbers.substring(1, numbers.length()-1).split(","))
    .map(String::trim).mapToInt(Integer::parseInt).toArray();
int sum = IntStream.of(nums).sum();
System.out.println("The sum is " + sum);

另一种 Java 8 方式:

public void test() {
    String str = "43 68 9 23 318";
    int sum = Pattern.compile(" ")
            .splitAsStream(str)
            .mapToInt(Integer::parseInt)
            .sum();
    System.out.println("sum:" + sum);
}

您可以尝试使用进行跟踪。 这里我们首先拆分String得到String[]和数字String["43", "68", "9", "23", "318"] )然后借助Arrays.stream我们可以映射所有这些StringsInteger ,我们将拥有IntStream ,从中我们可以获得所有流式Integer数值的sum

public class Test {

    public static void main(String[] args) {
        String input = "43 68 9 23 318";
        int sum = Arrays.stream(input.trim().split("\\s+"))
                        .mapToInt(Integer::parseInt)
                        .sum();
        System.out.println(sum);
    }
}    

输出

461

如果您不想去拆分它的麻烦,您可以就地进行:

public void test() {
    String str = "43 68 9 23 318";
    int sum = 0;
    int value = 0;
    for (int i = 0; i < str.length(); i++) {
        char ch = str.charAt(i);
        switch (ch) {
            case '0':
            case '1':
            case '2':
            case '3':
            case '4':
            case '5':
            case '6':
            case '7':
            case '8':
            case '9':
                value = value * 10 + (ch - '0');
                break;
            default:
                sum += value;
                value = 0;
                break;

        }

    }
    // Remember the last number.
    sum += value;
    value = 0;
    System.out.println("sum:" + sum);
}

这是具有功能的所需工作副本

    public class Main {
            /*This function is static because we called it from static main*/
        public static int returnSum(String str)
        {
            String []numbStr = str.split(" ");
            int sum = 0;

            for(String temp:numbStr)
            {
                 sum += Integer.parseInt(temp);
            }

            return sum;
        }

        public static void main(String... args)
        {
            String str = "43 68 9 23 318";
                    /*Note that we can call only static functions from main when directly calls*/ 
            int result =  returnSum(str);

            System.out.println(result);

        }
    }

一行中的 Java 8 Streams

Arrays.stream(text.split(" ")).mapToInt(Integer::parseInt).sum();

这不仅适用于包含由空格分隔的数字的字符串,还适用于包含除数字以外的字符的字符串,如 "abc10jh20"-->30

 import java.util.Arrays.*;
    public class HelloWorld{
        //this code works also if the string contains alphabets not just spaces
    static int count,sum;
         public static void main(String []args){
             String str="123 10 7";//getting input in form of string
             int length=str.length();
             for(int i=0;i<=length-1;i=i+count+1)
             {
                 count=0;
                 if(Character.isDigit(str.charAt(i)))
                 {
                     for(int j=i;j<=length-1;j++)
                     {
                         if(Character.isDigit(str.charAt(j)))
                         {
                             count++;//to find the length of the number

                         }
                         else{
                             break;
                         }

                     }
                     String str2=str.substring(i,i+count);//selecting the substring
                     System.out.println("the parsing string "+str2);//displays strings getting parsed
                     int inc=count+1;

                      sum=sum+Integer.parseInt(str2);//finding sum

                 }

             }
             System.out.println("the sum is "+sum);
         }
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM