我是这里的新手,请 Java 我正在尝试将字符串拆分为整数、符号和字符串。 我想存储整数并将它们用于算术运算. 每次尝试将拆分(数字(字符串转换为整数时,我都会收到错误(数字格式异常(。
package com.company;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class Main {
static ArrayList<Integer> numbers;
static String numInt;
static StringBuffer buffer;
static void splitString(String str){
StringBuffer alpha = new StringBuffer(), num = new StringBuffer(), special = new StringBuffer();
String numS = ""; String nume = "";
for(int i=0; i<str.length(); i++) {
if(Character.isDigit(str.charAt(i))) {
nume = numS + str.charAt(i);
} else if(Character.isAlphabetic(str.charAt(i))) {
alpha.append(str.charAt(i));
} else {
special.append(str.charAt(i));
}
}
System.out.println(alpha);
System.out.println(special);
int numInt = Integer.parseInt(nume.trim());
int numIntr = numInt + 47;
System.out.println(numIntr);
}
public static void main(String[] args) {
String str = "thissois8uy293849i0000r";
splitString(str);`enter code here`
}
}
你似乎有问题,首先你的数字没有增加。 nume = numS + str.charAt(i);
需要nume = nume + str.charAt(i);
,以便将数字添加到字符串中。
第二个问题是,在您的示例中,您最终得到的值82938490000
大于 Integer.MAX_VALUE
(2,147,483,647( 无法存储在int
中。如果将其更改为long
它将正常工作。
long numInt = Long.parseLong(nume.trim());
long numIntr = numInt + 47;
您可能需要考虑使用处理更大值的BigInteger
。
BigInteger numInt = new BigInteger(nume.trim());
BigInteger numIntr = numInt.add(BigInteger.valueOf(47));
此问题包含有关整数最大值的更多信息
有一些问题需要修复:
-
以下行无法按预期工作:
if(Character.isDigit(str.charAt(i))) { nume = numS + str.charAt(i); }
因为您在每次迭代中都会覆盖
nume
的值。 -
正如用户已经回答@DCTID的那样,您正在使用
int
来保存较大的数值。因此,请改用long
(甚至更好的BigInteger
(。
以下是 splitString
方法的修改代码,以防您不熟悉 Java:
static void splitString(String str) {
StringBuffer alpha = new StringBuffer();
StringBuffer num = new StringBuffer();
StringBuffer special = new StringBuffer();
for (int i = 0; i < str.length(); i++) {
if (Character.isDigit(str.charAt(i))) {
num.append(str.charAt(i));
} else if (Character.isAlphabetic(str.charAt(i))) {
alpha.append(str.charAt(i));
} else {
special.append(str.charAt(i));
}
}
long numInt = Long.parseLong(num.toString().trim()) + 47L;
System.out.println("Number: " + numIntr);
System.out.println("Characters: " + alpha);
System.out.println("Special chars: " + special);
}