簡體   English   中英

Java-如何將數字逆轉並拆分為數組?

[英]Java - How to reverse and split a number by digit into an array?

我正在學習來自紅寶石背景和自我教學的java。

我正在做一個問題,希望將數字取反並按數字列出到數組中。

例如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拆分為數字。 最后的浮點數是將字符串數組轉換為數字。

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;
  }
}

您的方法返回Float[]而不是int[] 嘗試這個:

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

使用JDK:

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

不像紅寶石那么簡潔。 實際上有點尷尬,但是仍然有1行。

您可以收集一個List ,然后使用Collections.reverse(List)將其reverse ,然后將其轉換為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();
}

這對我有用。

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;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM