java.lang.NumberFormatException:对于输入字符串:“”-StringBuilder
java.lang.NumberFormatException: For input string: ""-StringBuilder
该程序的主要目标是找到给定字符串中提取的美元金额的总和/找到附加在 $
符号之后的唯一数字的总和,总和结果应来自采用的输入是 50040。StringBiulder
对象出现在每个循环中,但是当我尝试将其转换为 toString
并尝试将其添加到总和时,出现错误。
需要将结果转换为数字并将其添加到未发生的总和中,我收到错误:
java.lang.NumberFormatException: For input string: ""
我的代码:
package com.example.demo;
public class DemoApplication2 {
public static void main(String args[]) {
long sum=0;
String str = new String("#1 Tickets ,000 Received . Expenses. ChequE.");
char chararray[] = str.toCharArray();
for (int i = 0; i < chararray.length; i++) {
StringBuilder someString = new StringBuilder();
if (chararray[i] == '$') {
for (int j = i+1; Character.isDigit(chararray[j]) || chararray[j] == ',' ; j++) {
if (Character.isDigit(chararray[j])) {
someString.append(chararray[j]);
}
i=j;
}
}
System.out.println(someString.toString());
sum=sum+Long.parseLong(someString.toString());
}
}
}
出现以下错误:
Exception in thread "main" java.lang.NumberFormatException: For input string: ""
at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.base/java.lang.Long.parseLong(Long.java:702)
at java.base/java.lang.Long.parseLong(Long.java:817)
at com.example.demo.DemoApplication2.main(DemoApplication2.java:27)
这是我的一项测试的结果。
The sum is 50040
执行此操作的一种方法是遍历 String
,检查美元符号。当你找到一个时,你将一个布尔开关设置为真。
如果布尔开关为真,您将获得下一个字符,直到到达停止字符(句点或 space)。我根据您的代码假设数值都是整数值而不是浮点值。否则,您将使用 Double
转换和 double
总和。
我忽略了逗号字符并将数字字符收集到一个StringBuilder
中。我将 StringBuilder
数字转换为 long
值。
我将停止字符放入一个单独的方法中以记录它们所代表的内容。
我将 StringBuilder
到 long
的转换放在一个单独的方法中,因为我执行了该代码两次。一次是当我检测到一个停止字符时,一次是在 String
的末尾。我在 String
的末尾进行检查,以防数字值位于 String
的末尾且没有停止字符。
这是完整的可运行代码。
public class DemoApplication2 {
public static void main(String[] args) {
long sum = 0;
String str = new String("#1 Tickets ,000 Received . Expenses. ChequE.");
char chararray[] = str.toCharArray();
boolean isNumber = false;
StringBuilder builder = new StringBuilder();
for (int i = 0; i < chararray.length; i++) {
if (isNumber) {
if (chararray[i] == ',') {
continue;
} else if (Character.isDigit(chararray[i])) {
builder.append(chararray[i]);
} else if (isStopCharacter(chararray[i])) {
sum += valueOf(builder);
isNumber = false;
}
}
if (chararray[i] == '$') {
isNumber = true;
}
}
sum += valueOf(builder);
System.out.println("The sum is " + sum);
}
public static boolean isStopCharacter(char c) {
return c == ' ' || c == '.';
}
public static long valueOf(StringBuilder builder) {
long value = 0L;
if (builder.length() > 0) {
value = Long.valueOf(builder.toString());
builder.delete(0, builder.length());
}
return value;
}
}
该程序的主要目标是找到给定字符串中提取的美元金额的总和/找到附加在 $
符号之后的唯一数字的总和,总和结果应来自采用的输入是 50040。StringBiulder
对象出现在每个循环中,但是当我尝试将其转换为 toString
并尝试将其添加到总和时,出现错误。
需要将结果转换为数字并将其添加到未发生的总和中,我收到错误:
java.lang.NumberFormatException: For input string: ""
我的代码:
package com.example.demo;
public class DemoApplication2 {
public static void main(String args[]) {
long sum=0;
String str = new String("#1 Tickets ,000 Received . Expenses. ChequE.");
char chararray[] = str.toCharArray();
for (int i = 0; i < chararray.length; i++) {
StringBuilder someString = new StringBuilder();
if (chararray[i] == '$') {
for (int j = i+1; Character.isDigit(chararray[j]) || chararray[j] == ',' ; j++) {
if (Character.isDigit(chararray[j])) {
someString.append(chararray[j]);
}
i=j;
}
}
System.out.println(someString.toString());
sum=sum+Long.parseLong(someString.toString());
}
}
}
出现以下错误:
Exception in thread "main" java.lang.NumberFormatException: For input string: ""
at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.base/java.lang.Long.parseLong(Long.java:702)
at java.base/java.lang.Long.parseLong(Long.java:817)
at com.example.demo.DemoApplication2.main(DemoApplication2.java:27)
这是我的一项测试的结果。
The sum is 50040
执行此操作的一种方法是遍历 String
,检查美元符号。当你找到一个时,你将一个布尔开关设置为真。
如果布尔开关为真,您将获得下一个字符,直到到达停止字符(句点或 space)。我根据您的代码假设数值都是整数值而不是浮点值。否则,您将使用 Double
转换和 double
总和。
我忽略了逗号字符并将数字字符收集到一个StringBuilder
中。我将 StringBuilder
数字转换为 long
值。
我将停止字符放入一个单独的方法中以记录它们所代表的内容。
我将 StringBuilder
到 long
的转换放在一个单独的方法中,因为我执行了该代码两次。一次是当我检测到一个停止字符时,一次是在 String
的末尾。我在 String
的末尾进行检查,以防数字值位于 String
的末尾且没有停止字符。
这是完整的可运行代码。
public class DemoApplication2 {
public static void main(String[] args) {
long sum = 0;
String str = new String("#1 Tickets ,000 Received . Expenses. ChequE.");
char chararray[] = str.toCharArray();
boolean isNumber = false;
StringBuilder builder = new StringBuilder();
for (int i = 0; i < chararray.length; i++) {
if (isNumber) {
if (chararray[i] == ',') {
continue;
} else if (Character.isDigit(chararray[i])) {
builder.append(chararray[i]);
} else if (isStopCharacter(chararray[i])) {
sum += valueOf(builder);
isNumber = false;
}
}
if (chararray[i] == '$') {
isNumber = true;
}
}
sum += valueOf(builder);
System.out.println("The sum is " + sum);
}
public static boolean isStopCharacter(char c) {
return c == ' ' || c == '.';
}
public static long valueOf(StringBuilder builder) {
long value = 0L;
if (builder.length() > 0) {
value = Long.valueOf(builder.toString());
builder.delete(0, builder.length());
}
return value;
}
}