Java - 如何将数字反转和拆分成数组?

时间:2017-02-20 02:31:42

标签: java

我正在学习java来自红宝石背景和自学。

我正在做一个问题,想要一个数字反转并按数字列入数组。

Ex 1234 - > [4,3,2,1]

在红宝石中,我很容易做到这一点 -

def digitize(n)
  n.to_s.reverse.split("").map(&:to_i)
end

在java中,我的代码不起作用,因为显然,我做错了。

public class Kata {
  public static int[] digitize(long n) {

  String s = String.valueOf(n);
  String r = reverse(s, s.length()-1);
  String[] array = r.split("");
  Float[] floats = Arrays.stream(array).map(Float::valueOf).toArray(Float[]::new);
  }

  return floats;
}

使用像ruby这样的内置方法有更简单的方法吗?我试着分开做一切。第一个变量 s ,我想将数字转换为字符串。第二个变量 r ,反转该字符串。第三个变量数组,将变量r分成数字。最后的浮点数是将字符串数组转换为数字。

5 个答案:

答案 0 :(得分:2)

public class Kata {
  public static int[] digitize(long n) {
    String numStr = String.valueOf(n);
    int digits[] = new int[numStr.length()];
    int counter = 0;

    for(int i = numStr.length() - 1; i >= 0; i--) {
      digits[i] = Integer.parseInt(Character.toString(numStr.charAt(counter++)));
    }

    return digits;
  }
}

答案 1 :(得分:1)

您的方法返回Float[]而不是int[]。试试这个:

int[] ints = Arrays.stream(array).mapToInt(Integer::parseInt).toArray();
return ints;

答案 2 :(得分:1)

使用JDK:

int[] reversedDigits = Arrays.stream(new StringBuilder().append(n).reverse().toString().split("(?<=.)")).mapToInt(Integer::parseInt).toArray();

不像红宝石那么简洁。实际上有点尴尬,但不过一线。

答案 3 :(得分:0)

您可以使用List收集reverse然后Collections.reverse(List),然后将其转换为int[]。像,

public static int[] digitize(long n) {
    String s = String.valueOf(n);
    List<Integer> al = s.chars().map(ch -> Character.digit(ch, 10))
            .boxed().collect(Collectors.toList());
    Collections.reverse(al);
    return al.stream().mapToInt(Integer::intValue).toArray();
}

利用String.length()直接构建数组,如

public static int[] digitize(long n) {
    String s = String.valueOf(n);
    int[] out = new int[s.length()];
    IntStream.range(0, s.length()).forEach( //
            i -> out[i] = Character.digit(s.charAt(s.length() - i - 1), 10));
    return out;
}

map与更短的

组合在一起
public static int[] digitize(long n) {
    String s = String.valueOf(n);
    return IntStream.range(0, s.length()) //
            .map(i -> Character.digit(s.charAt(s.length() - i - 1), 10)).toArray();
}

答案 4 :(得分:0)

这适合我。

import java.lang.StringBuffer;

public class Kata {
  public static float[] digitize(long n) {

  int[] ints= new StringBuffer(n.toString()).reverse().toString().split("(?!^)").mapToInt(Integer::parseInt).toArray();;

  return ints;
}