【问题标题】:Convert String to int array in Java the fast way在Java中快速将String转换为int数组
【发布时间】:2017-12-21 12:36:31
【问题描述】:

有谁知道更快将字符串转换为int数组的方法吗?

Java V7

给出的格式是“4 343 234 -24”等等。数字之间的空格,数字的数量是预先知道的,就像数字内的范围一样

long[] array = new long[length];            
for (int i = 0; i < length - 1; i++) {
    array[i] = Integer.parseInt(n.substring(0, n.indexOf(' ')));
    n = n.substring(n.substring(0, n.indexOf(' ')).length() + 1);
}
array[length - 1] = Integer.parseInt(n);

【问题讨论】:

  • 如果它工作得更好,你把它发布到 codereview.stackexchange.com
  • 尝试将输入字符串拆分为组件编号,然后根据需要将其中的每一个转换为 long/int
  • 只需使用String#split,它将根据分隔符拆分您的字符串(在此处使用“”),您将获得一个包含所有不同数字的数组。
  • 我投票决定将此问题作为离题结束,因为要求审查工作代码的问题属于 codereview.stackexchange.com

标签: java arrays string int


【解决方案1】:

当您想按单个字符(在您的情况下为空格)分割时,使用 String.split() 是迄今为止最有效的。

如果您的目标是按空格分割时的最大效率,那么这将是一个很好的解决方案:

List<Integer> res = new ArrayList<>();
Arrays.asList(kraft.split(" ")).forEach(s->res.add(Integer.parseInt(s)));
Integer[] result = res.toArray(new Integer[0]);

这适用于任意数量的数字。

【讨论】:

  • @MelissaLoos 然后稍等片刻。 (List 有办法把它转成数组,就是记不住)
  • @ItamarG3 您可以将解析后的ints 直接添加到数组中。
  • @Nathan 我觉得这更优雅。不知道为什么
  • @MelissaLoos Integer 是一个代表int 的对象类。 Longlong 相同。您可以将Integer[] result 替换为int[]
  • 不需要中间的List
【解决方案2】:

使用\\s+ 模式拆分输入将处理出现在数字之间的一个或多个空白字符,而不仅仅是空格。

Stream.of(input.split("\\s+")).mapToInt(Integer::parseInt).toArray();

mapToInt 方法返回一个IntStream,它提供了toArray 方法。此方法返回一个包含IntStream 元素的数组。

【讨论】:

    【解决方案3】:

    如果您使用的是 Java8 或更高版本,那么您可以通过编写这一行代码来获得预期的输出。

    String str= "4 343 234 -24";
    
    int[] intArr=Stream.of(str.split(" ")).mapToInt(Integer::parseInt).toArray();
    
    System.out.println(Arrays.toString(intArr));
    

    【讨论】:

    • 为什么是str1.replace("-", "")?这个问题没有提到绝对值。
    • 现在检查更新的代码。我已经通过删除 replace() 方法解决了这个问题。
    猜你喜欢
    • 2011-11-30
    • 2011-10-16
    • 1970-01-01
    • 1970-01-01
    • 2014-08-09
    • 2014-03-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多