Java 将写入字符串的整数求和

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/34543967/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-11 15:45:47  来源:igfitidea点击:

Sum Integers written into a String

javastringinteger

提问by slaviyy

I used

我用了

int num = Integer.parseInt(str)

to written integer values into a string.I need a function that reads these values from given string and calculates their sum.

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

Example: input - "43 68 9 23 318" output - 461

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

回答by YoungHobbit

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

What you are doing is, trying to parse the complete input string at once, that will throw the NumberFormatException. You need to split it first and then perform the sum on each returned String.

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



Split the input string by whitespacethen parse each number and perform the sum.

拆分输入字符串,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.
}

回答by Pravat Panda

In Java 8, using streams

在 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);

回答by OldCurmudgeon

If you don't want to go to the hassle of splitting it you can do it in-place:

如果你不想去拆分它的麻烦,你可以就地做:

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);
}

回答by CoderCroc

You can try following with java-8. Here we first split the Stringto get String[]with number String(i.e["43", "68", "9", "23", "318"]) and then with the help of Arrays.streamwe can mapall those Stringsto Integerand we will have IntStreamand from that we can get sumof all streamed Integervalues.

您可以尝试使用java-8 进行关注。在这里,我们首先将String得到String[]的数字String["43", "68", "9", "23", "318"])分开,然后在Arrays.stream我们的帮助下我们可以所有这些映射StringsInteger我们将拥有IntStream并从中我们可以获得sum所有流Integer值。

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);
    }
}    

OUTPUT

输出

461

回答by OldCurmudgeon

Another Java 8 way:

另一种 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);
}

回答by Abhishek

This is the needed Working copy with function

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

    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);

        }
    }

回答by sujatha saravana kumar

This works not only for the strings that contains numbers separated by spaces but also for the strings containing characters others than numbers like "abc10jh20"-->30

这不仅适用于包含由空格分隔的数字的字符串,而且适用于包含数字以外的字符的字符串,如 "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);
         }
    }