[英]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.