【问题标题】:Splitting String and put it on int array拆分字符串并将其放在 int 数组中
【发布时间】:2023-04-04 16:49:01
【问题描述】:

我必须输入一个带有数字的字符串,例如:1、2、3、4、5。 这是输入的一个样本,然后我必须把它放在一个 INT 数组中,这样我就可以对其进行排序,但它并没有按照它应该工作的方式工作。

package array;

import java.util.Scanner;

public class Array {

    public static void main(String[] args) {
        String input;
        int length, count, size;
        Scanner keyboard = new Scanner(System.in);
        input = keyboard.next();
        length = input.length();
        size = length / 2;
        int intarray[] = new int[size];
        String strarray[] = new String[size];
        strarray = input.split(",");

        for (count = 0; count < intarray.length ; count++) {
            intarray[count] = Integer.parseInt(strarray[count]);
        }

        for (int s : intarray) {
            System.out.println(s);
        }
    }
}

【问题讨论】:

  • “没有按照应有的方式工作”以什么方式?错误?面对错误的输入不起作用? s 总是空的?
  • strArr = input.split(',') 然后只需将 strArr 复制到 intArr

标签: java arrays string int


【解决方案1】:

对于输入 1,2,3,4,5,输入的长度为 9。9/2 = 4 在整数数学中,因此您只存储前四个变量,而不是全部 5。

即使你修复了这个问题,如果你传入10,11,12,13 的输入,它也会严重崩溃

如果您使用1,2,3,4,50 作为输入,它会起作用(偶然),奇怪的是:-)

你最好做这样的事情

String[] strArray = input.split(",");
int[] intArray = new int[strArray.length];
for(int i = 0; i < strArray.length; i++) {
    intArray[i] = Integer.parseInt(strArray[i]);
}

为了将来参考,当您遇到错误时,我强烈建议您将其与代码一起发布。您可能没有现成的 jdk 来编译代码来调试它! :)

【讨论】:

    【解决方案2】:

    您正在进行整数除法,因此如果用户碰巧输入奇数个输入,您将丢失正确的长度 - 这是我注意到的一个问题。因此,当我使用输入 '1,2,3,4,5,6,7' 运行代码时,我的最后一个值被忽略...

    【讨论】:

      【解决方案3】:

      假设您输入的是“1,2,3,4”。

      这意味着输入的长度是 7。所以现在你写 size = 7/2 = 3.5。但是由于 size 是int,所以会四舍五入为 3。简而言之,您损失了 1 个值。

      如果你重写代码如下,它应该可以工作:

      String input;
      int length, count, size;
      Scanner keyboard = new Scanner(System.in);
      input = keyboard.next();
      length = input.length();
      
      String strarray[] = input.split(",");
      int intarray[] = new int[strarray.length];
      
      for (count = 0; count < intarray.length ; count++) {
          intarray[count] = Integer.parseInt(strarray[count]);
      }
      
      for (int s : intarray) {
          System.out.println(s);
      }
      

      【讨论】:

        【解决方案4】:
        String input = "2,1,3,4,5,10,100";
        String[] strings = input.split(",");
        int[] numbers = new int[strings.length];
        for (int i = 0; i < numbers.length; i++)
        {
          numbers[i] = Integer.parseInt(strings[i]);
        }
        Arrays.sort(numbers);
        
        System.out.println(Arrays.toString(numbers));
        

        【讨论】:

        • 我建议你改用这个:numbers[i] = Integer.parseInt(strings[i].trim()) 否则如果字符串是“4,22,42”,它会抛出一个例外。
        【解决方案5】:

        稍微改变你做事的顺序。您似乎完全没有特别的原因除以 2。

        虽然您的应用程序不保证输入字符串由分号分隔的变量组成,但您可以轻松地做到这一点:

        package com;
        
        import java.util.Scanner;
        
        public class Test {
            public static void main(String[] args) {
                // Good practice to initialize before use
                Scanner keyboard = new Scanner(System.in);
                String input = "";
                // it's also a good idea to prompt the user as to what is going on
                keyboardScanner : for (;;) {
                    input = keyboard.next();
                    if (input.indexOf(",") >= 0) { // Realistically we would want to use a regex to ensure [0-9],...etc groupings 
                        break keyboardScanner;  // break out of the loop
                    } else { 
                        keyboard = new Scanner(System.in);
                        continue keyboardScanner; // recreate the scanner in the event we have to start over, just some cleanup
                    }
                }
        
                String strarray[] = input.split(","); // move this up here      
                int intarray[] = new int[strarray.length];
        
                int count = 0; // Declare variables when they are needed not at the top of methods as there is no reason to allocate memory before it is ready to be used
                for (count = 0; count < intarray.length; count++) {
                    intarray[count] = Integer.parseInt(strarray[count]);
                }
        
                for (int s : intarray) {
                    System.out.println(s);
                }
            }
        }
        

        【讨论】:

        • 除以 2 是因为假设每个数字都有一个对应的逗号。当然,我们知道这是一个有缺陷的假设,但我确信这是 OP 当时的思路。
        【解决方案6】:

        类似这样的:

          public static void main(String[] args) {
           String N = "ABCD";
           char[] array = N.toCharArray();
        
           // and as you can see:
            System.out.println(array[0]);
            System.out.println(array[1]);
            System.out.println(array[2]);
          }
        

        【讨论】:

        • @Downvoters,至少评论下投票的原因。
        • @K_7 " 输入带有数字的字符串,例如:1,2,3,4,5" 而不是 "ABCD"
        【解决方案7】:

        Java 8 提供了一种基于流的手动迭代替代方案:

        int[] intArray = Arrays.stream(input.split(","))
            .mapToInt(Integer::parseInt)
            .toArray();
        

        如果输入可能包含无法转换为整数的字符序列,请准备好捕获NumberFormatException

        【讨论】:

        • 注意对于 Android 开发者,您还需要最低 SDK 版本 24 以及 Java 8
        【解决方案8】:
        List<String> stringList = new ArrayList<String>(Arrays.asList(arr.split(",")));
        List<Integer> intList = new ArrayList<Integer>();
        for (String s : stringList) 
           intList.add(Integer.valueOf(s));
        

        【讨论】:

        • 这不能回答问题。问题是关于创建一个 int 数组,而不是 List&lt;Integer&gt;
        猜你喜欢
        • 1970-01-01
        • 2020-09-06
        • 1970-01-01
        • 2020-08-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-01-07
        相关资源
        最近更新 更多