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
Sum Integers written into a String
提问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 whitespace
then 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 String
to get String[]
with number String
(i.e["43", "68", "9", "23", "318"]
) and then with the help of Arrays.stream
we can mapall those Strings
to Integer
and we will have IntStream
and from that we can get sum
of all streamed Integer
values.
您可以尝试使用java-8 进行关注。在这里,我们首先将String
得到String[]
的数字String
(即["43", "68", "9", "23", "318"]
)分开,然后在Arrays.stream
我们的帮助下我们可以将所有这些映射Strings
到Integer
我们将拥有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);
}
}