[英]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);
}
您可以尝试使用java-8进行跟踪。 这里我们首先拆分String
得到String[]
和数字String
(即["43", "68", "9", "23", "318"]
)然后借助Arrays.stream
我们可以映射所有这些Strings
到Integer
,我们将拥有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.