【问题标题】:Converting string into array of ints ex String st = "1 2 3 4 5" into ar=[1,2,3,4,5]将字符串转换为 String at = "1 2 3 4 5" 中的整数数组到 ar=[1,2,3,4,5]
【发布时间】:2014-12-08 14:52:00
【问题描述】:

我正在读取一个字符串,作为一整行数字,以空格分隔,即1 2 3 4 5。我想将它们转换为整数数组,以便我可以操作它们。但是这段代码不起作用。它说不兼容的类型。

String str = br.readLine();
int[] array = new int[4];
StringTokenizer tok = new StringTokenizer(str," ", true);
boolean expectDelim = false;
int i = 0;

while (tok.hasMoreTokens()) {
    String token = tok.nextToken();
    ar[i] = Integer.parseInt(token);
    i++;
}

【问题讨论】:

  • “不兼容的类型” - 在哪一行?就目前而言,这不会编译:你混合了ararray。请给我们一个完整的样品!无论如何,你的数组对于 12345 来说太短了:为什么不使用 ArrayList?
  • 在哪一行出现编译错误
  • 另外,the JDK 说:“StringTokenizer 是一个遗留类,出于兼容性原因,尽管不鼓励在新代码中使用它。建议任何寻求此功能的人使用 String 的 split 方法或 java.util.regex 包。"
  • 您也在 StringTokenizer 构造函数中传递 true 。因此,您将分隔符作为令牌返回。这可能不是你想要的。
  • 我无法重现您的问题,我得到 NumberFormatExeption 是因为您决定 StringTokenizer 还应该通过使用 true 作为其构造函数的最后一个参数来返回分隔符(空格)。此外,“1 2 3 4 5”代表 5 个元素,因此大小为 4 的数组将无法容纳所有元素。

标签: java arrays string stringtokenizer parseint


【解决方案1】:

如果你有一个String s = "1 2 3 4 5",那么你可以像这样把它分成不同的位:

String[] bits = s.split(" ");

现在你必须将它们转换成int[]

int[] nums = new int[bits.length];
int i=0;
for (String s: bits)
    nums[i++] = Integer.parseInt(s);

这将遍历拆分数组中的每个小字符串,将其转换为整数,并将其放入新数组中。

【讨论】:

    【解决方案2】:

    您不需要分隔符。改变这个:

    StringTokenizer tok = new StringTokenizer(str," ", true);
    

    到这里:

    StringTokenizer tok = new StringTokenizer(str," ");
    

    您的代码中发生的情况是它试图将(空格)解析为int

    或者,正如 chiastic-security 所指出的,现在大多数人只会使用 String.split(...)

    【讨论】:

      【解决方案3】:

      您可以使用以下代码将由空格分隔的数字组成的字符串转换为int[]

      import static java.util.Arrays.stream;
      
      public class ConvertString {
          public static void main(final String... args) {
              final String s = "1 2 3 4 5";
              final int[] numbers = stream(s.split("\\s+")).mapToInt(Integer::parseInt).toArray();
      
              // Print it as a demo.
              for (final int number : numbers)
                  System.out.format("%s ", number);
              System.out.println();
          }
      }
      

      【讨论】:

        【解决方案4】:

        Java 8 风格的解决方案:

        String input = "1 2 3 4 5";
        
        int[] numbers = Arrays.stream(input.split("\\s+"))
                .mapToInt(Integer::parseInt).toArray();
        

        【讨论】:

        • 是的,Java 8!你可以直接stream() 数组,不需要中间的asList()
        猜你喜欢
        • 1970-01-01
        • 2011-02-11
        • 1970-01-01
        • 2016-01-25
        • 2018-08-01
        • 2019-12-21
        • 1970-01-01
        • 2011-01-07
        • 1970-01-01
        相关资源
        最近更新 更多