【问题标题】:How can i split a string into integers, symbols and strings, and then store the integer values to use for arithmetic operation如何将字符串拆分为整数、符号和字符串,然后存储整数值以用于算术运算
【发布时间】:2023-03-09 07:57:01
【问题描述】:

我是新来这里和 java,请我尝试将字符串拆分为整数、符号和字符串。我想存储整数并将它们用于算术运算。每次尝试将拆分(数字)字符串转换为整数时,我都会收到错误(NumberFormatException)。

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`
    }
}

【问题讨论】:

  • 如果数字有两个数字,21 或 3 301 怎么办?

标签: java


【解决方案1】:

你似乎有问题,首先你的号码没有增加。 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));

这个question 有更多关于整数最大值的信息

【讨论】:

    【解决方案2】:

    有一些问题需要解决:

    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);
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-08-30
      • 1970-01-01
      • 2021-12-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-18
      相关资源
      最近更新 更多