如何将字符串拆分为整数、符号和字符串,然后存储整数值以用于算术运算



我是这里的新手,请 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));

此问题包含有关整数最大值的更多信息

有一些问题需要修复:

  1. 以下行无法按预期工作:

    if(Character.isDigit(str.charAt(i))) {
        nume = numS + str.charAt(i);
     }
    

    因为您在每次迭代中都会覆盖 nume 的值。

  2. 正如用户已经回答@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);
}

最新更新