【问题标题】:Error trying to convert list to an array[]尝试将列表转换为数组时出错 []
【发布时间】:2016-04-05 01:07:54
【问题描述】:

我引用了this 试图将我的列表转换为数组,但我似乎无法让它工作。这是我所拥有的:

    int values[] = Arrays.asList(str.replaceAll("[^-?0-9]+", " ").trim().split(" ")).toArray();

我得到的错误(类型不匹配)表明我应该将 values[] 的类型从 int 更改为 object

最终结果应该只是一个数字数组。 示例:a-9000xyz89 将是一个以 [-9000, 89] 作为值的数组

【问题讨论】:

    标签: java arrays list int type-conversion


    【解决方案1】:

    以下内容适用于 Java 8

    int[] values = Arrays.stream(str.replaceAll("[^-?0-9]+", " ").trim().split(" ")).mapToInt(Integer::parseInt).toArray();
    

    注意 - [^-?0-9]+ 不支持 a-90-00xyz89a-9000x-yz89 等字符串,因为它会产生非整数

    【讨论】:

      【解决方案2】:

      String#split 将返回 String[] 而不是 int[]。您必须遍历String[] 并创建int[]。此外,您不需要使用Arrays.asList 将数组转换为列表。

      例如,

      String str = "1 2 3 4";
      String arr[] = str.split(" ");
      int[] ans = new int[arr.length];
      for (int i = 0; i < arr.length; i++) {
          ans[i] = Integer.parseInt(arr[i]);
      }
      System.out.println(Arrays.toString(ans));
      

      输出

      [1, 2, 3, 4]
      

      编辑

      当我删除 toArray() 和当我 更改values[] to a String[]. String values[] = Arrays.asList(question.replaceAll("[^-?0-9]+", " ").trim().split(" "));

      请注意,在您的情况下,Arrays.asList 将返回 List&lt;String&gt;,但 values 的类型是 String[]

      您可以将split 的结果直接存储在值中,

      String values[] = question.replaceAll("[^-?0-9]+", " ").trim().split(" ");
      

      【讨论】:

      • 当我删除 toArray() 并将 values[] 更改为 String[] 时,我遇到了同样的错误。字符串值[] = Arrays.asList(question.replaceAll("[^-?0-9]+", " ").trim().split(" "));
      • 感谢您的回复,但是,对于我的情况,这将不起作用,因为我不想将每个数字彼此分开;我只想将数字与字符串分开。所以如果我有一个 string = "xyq123x1" 它应该返回 [123, 1] 而不是 [1, 2, 3, 1]。
      猜你喜欢
      • 2018-07-02
      • 2014-12-14
      • 2018-05-09
      • 2023-03-06
      • 2021-04-15
      • 1970-01-01
      • 1970-01-01
      • 2019-06-25
      • 1970-01-01
      相关资源
      最近更新 更多