2017-02-20 11 views
0

私はルビーの背景と自己教えから来ているJavaを学んでいます。Java - 数字を配列に逆順に分割する方法は?

数字を逆にして数字で配列に表示したいという問題を抱えています。

例1234 - Rubyで> [4,3,2,1]

私は簡単にこれをしなかった -

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

を明確に、私がやっているので、私のコードは、動作しません何か問題でも。

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

ルビのような組み込みメソッドでこれを行う簡単な方法はありますか?私はすべてを別々にやろうとした。最初の変数を数値に変換する必要がありました。 2番目の変数r、その文字列を反転します。第3の変数配列、変数rを数字に分割する。 最後にの浮動小数点数は、文字列の配列を数字に変換することでした。

+1

「機能しない」と定義します。 – shmosel

+3

私は怠惰なので、私はStringBuilder.reverseを使用する –

答えて

1

int[]の代わりにFloat[]が返されます。これを試してみてください:

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

JDKを使用します

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

ないルビーのように簡潔に。それにもかかわらず、実際には少し恥ずかしい。

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

良い解決策、より良い文字列を反転する –

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

またははさらに短い

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(); 
} 
0

ためmapでこれが機能することを組み合わせて直接

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

またはのような配列を構築するためのString.length()を活用します私のために。

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; 
} 
関連する問題