【问题标题】:How to use valueOf to convert a string array to a int array?如何使用 valueOf 将字符串数组转换为 int 数组?
【发布时间】:2019-11-24 03:28:33
【问题描述】:

我想将以下列表转换为 int 数组。我曾尝试使用valueof,但我不知道如何使用它。我不想解析它。

我这里有一个字符串数组: String[] arr1 = new String[]{"5","5","15","5","10","10", "5", "10", "20", "15"};

这是我试过的代码:

int num = Integer.valueOf(arr1);

我收到一条错误消息:

error: no suitable method found for valueOf(String[])
    int num = Integer.valueOf(arr1);
                     ^
    method Integer.valueOf(String) is not applicable
      (argument mismatch; String[] cannot be converted to String)
    method Integer.valueOf(int) is not applicable
      (argument mismatch; String[] cannot be converted to int)
Note: Some messages have been simplified; recompile with -Xdiags:verbose to get full output
1 error

【问题讨论】:

  • 我将如何使用 valueOf?
  • 如果您想将这些数字的字符串表示形式转换为整数,那么您确实想要解析它们。
  • 感谢您的回答。我知道​​解析可能更容易,但我被告知不要使用它。
  • 感谢您的澄清,我是编程新手,所以我很困惑。

标签: java arrays


【解决方案1】:

我假设您想将arr1 数组中的每个值映射到int,结果应该是一个int[](不是一个int)。流式传输数组,将元素映射到int,然后调用toArray。喜欢,

int[] numArr = Arrays.stream(arr1).mapToInt(Integer::valueOf).toArray();

请注意,以这种方式调用valueOf 仍然是将String 解析为int 的示例。

【讨论】:

  • 我将如何使用 valueOf?
  • 感谢您的澄清,我是编程新手,所以我很困惑。
【解决方案2】:

使用流:

int[] intArray = Stream.of(arr1).mapToInt(Integer::parseInt).toArray();

【讨论】:

  • 感谢您的回答,如前所述,我根本不想解析。有没有其他方法可以做到。
  • valueOf 在内部调用 parseInt,所以不确定您是否有选择
  • 感谢您的澄清,我是编程新手,所以我很困惑。
【解决方案3】:

您可以遍历Array的每个元素并将其转换为Int并推送到IntArray

String[] arr1 = new String[]{"5","5","15","5","10","10", "5", "10", "20", "15"};
int[] intArr = new int[arr1.length];

for (int i = 0; i < arr1.length; i++) {
  intArr[i] = Integer.valueOf(arr1[i]);
}

valueOf 内部使用parseInt

public static Integer valueOf(String s) throws NumberFormatException {
    return Integer.valueOf(parseInt(s, 10));
}

【讨论】:

  • 感谢您的回答,如前所述,我根本不想解析。有什么办法可以使用 valueOf 做到这一点?
  • 是的,您可以使用valueOf 代替parseIntvalueOf 返回一个 int 而不是 int arr。这就是为什么您需要使用 for each 或 Stream 将其推入 int arr 的原因,正如其他答案所建议的那样。
  • 感谢您的澄清,我是编程新手,所以我很困惑。
【解决方案4】:

以下是不使用valueOfparseInt 的方法。

      String[] arr1 = new String[] { "5", "5", "15", "5", "10", "10", "5", "10"
      };


      int[] vals = Arrays.stream(arr1).mapToInt(str -> str.chars().reduce(0,
            (val, ch) -> val * 10 + (ch - '0'))).toArray();

      System.out.println(Arrays.toString(vals));

以下是它的局限性:

  1. 如果您的字符串包含数字以外的字符。它会悄悄地给你错误的答案。
  2. 它不处理负值。
  3. 如果任何单个数字超过Integer.MAX_VALUE,它将引发异常。

我的建议是使用Integer.valueOf。这就是它的用途。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-26
    • 1970-01-01
    • 2021-12-21
    • 2016-08-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多