【问题标题】:How to split a String into integers?如何将字符串拆分为整数?
【发布时间】:2014-10-17 21:51:19
【问题描述】:

我想拆分一个字符串,并将字符串的每个数字存储为一个整数。

这是我的测试代码:

public class test {
    public static void main(String[] args){
        int firstGuessDigit, secondGuessDigit, thirdGuessDigit, fourthGuessDigit;
        String guess = "1234";
        String[] parts = guess.split("\");
        firstGuessDigit = Integer.parseInt(parts[0]);
        secondGuessDigit = Integer.parseInt(parts[1]);
        thirdGuessDigit = Integer.parseInt(parts[2]);
        fourthGuessDigit = Integer.parseInt(parts[3]);
    }

}

当我运行程序时,我得到一个错误:“线程中的异常“main”java.lang.ArrayIndexOutOfBoundsException:1 在 test.main(test.java:11)

【问题讨论】:

  • 为什么不用String方法toCharArray
  • String[] 部分 =guess.toCharArray();
  • @AntonH 如果我使用这种方法,我可以单独访问每个数字吗?
  • 是的,你可以。看我的回答。
  • 你之前的问题怎么了?关于查看十进制输出的那个?你从来没有回复我的 cmets。

标签: java arrays string split integer


【解决方案1】:

您可以使用chars() 流获取字符串的字符,并使用Character.getNumericValue 将它们映射到它们的数值:

"1234".chars().map(Character::getNumericValue).toArray()

如果您希望将它们作为列表而不是数组来获取,您可以使用:

"1234".chars().map(Character::getNumericValue).boxed().collect(Collectors.toList())

【讨论】:

    【解决方案2】:

    你得到的错误是因为你试图在没有它的时候做部分[1]。

    您要查找的代码是:

    String guess = "1234";
    int[] guessInteger = new int[guess.length()];
    int i=0;
    for(Character ch : guess.toCharArray()){
        if(Character.isDigit(ch)){
            guessInteger[i++] = Character.getNumericValue(ch);
        }
    }
    

    【讨论】:

    • 或者干脆int[] guessInteger = guess.chars().map(Character::getNumericValue).toArray();
    • @dusky 我们需要了解 OP 显然是初学者。所以保持简单,让他们通过它来理解和调试。
    • 无需将Character 转换为String 并调用Integer.parseInt。您可以使用Character.getNumericValue(ch)Character.digit(ch, 10) 获取数值。
    • @DavidConrad 改变了这一点。
    • @wrongAnswer 它很简单。尽管 lambda 是 Java 的新手,但它们并不难理解。许多 JavaScript 或 C# 人从一开始就使用 lambda。 Lambdas 现在是 Java 的一部分,添加它们是为了让事情变得更容易,所以请使用它们。
    【解决方案3】:

    您可以改用String#toCharArray

    char[] parts = guess.toCharArray();
    firstGuessDigit = Integer.parseInt(Character.toString(parts[0]));
    secondGuessDigit = Integer.parseInt(Character.toString(parts[1]));
    thirdGuessDigit = Integer.parseInt(Character.toString(parts[2]));
    fourthGuessDigit = Integer.parseInt(Character.toString(parts[3]));
    

    【讨论】:

    • 如果 str 被更改为正确的循环方式,这仍然会引发 java.lang.ArrayIndexOutOfBoundsException 异常。就像它完成了here
    • @wrongAnswer 我倾向于尽可能接近 OP 的回答。如果他们不使用循环,我也不会。但是是的,循环会更好(“正确”是有争议的)。而且懒得加try...catch代码。
    【解决方案4】:

    应该这样做。

    public class Test {
    
        public static void main(String[] args) {
    
            int firstGuessDigit, secondGuessDigit, thirdGuessDigit, fourthGuessDigit;
            String guess = "1234";
    
            String[] parts = new String[4];
            for(int i = 0; i < 4; i++) {
                parts[i] = ""+guess.charAt(i);
            }
    
            firstGuessDigit = Integer.parseInt(parts[0]);
            secondGuessDigit = Integer.parseInt(parts[1]);
            thirdGuessDigit = Integer.parseInt(parts[2]);
            fourthGuessDigit = Integer.parseInt(parts[3]);
    
        } 
    
    }
    

    【讨论】:

      【解决方案5】:

      ("%-11s%03d%n")% :用作格式化程序。

      • -:用于字符串左缩进的减号。
      • 11s:这里11表示字符串的最小字段宽度11。
      • 0:填充整数中多余的 0。
      • 3d:这里 3 表示整数的最小字段宽度 3。
      • %n:打印新行。

      希望,这会有所帮助!

      【讨论】:

      • 请用工作代码示例解释您的答案。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-12-19
      • 1970-01-01
      • 2021-12-07
      • 1970-01-01
      • 1970-01-01
      • 2013-05-23
      相关资源
      最近更新 更多