したがって、入力された整数がある場合:
int num_1 = 128
数値を解析して1、2、8を取得し、それらを異なる変数に割り当てるにはどうすればよいですか?
ありがとう!
これを行う非効率的な方法は、整数を文字列に変換し、文字列の文字を反復処理することです。
より効率的な方法は次のようなものです。
int n = 128;
while (n > 0) {
int d = n / 10;
int k = n - d * 10;
n = d;
System.out.println(k);
}
ティロが書いた答えは良いですが不完全です、あなたは次のことから始めます:
char[] digitsAsChars = String.valueOf(num_1).toCharArray();
その後:
int[] digits = new int[charNums.length];
for(int i=0; i<charNums.length; i++){
digits[i] = charNums[i]-48;//convert char to int
}
digits
は、数値の桁をint配列として保持します
int num = 128;
String number = String.valueOf(num);
for(int i = 0; i < number.length(); i++) {
int j = Character.digit(number.charAt(i), 10);
System.out.println("digit: " + j);
}
出力:
digit: 1
digit: 2
digit: 8
試す
while (num_1> 0){
int digit = num_1%10;
num_1 = num_1/10;
System.out.println(digit);
}
それを文字列に変換し、桁ごとに1文字ずつ移動します。
char[] digits = String.valueOf(num_1).toCharArray();
これが1つの方法です。
String digits = Integer.toString(num_1);
int digit1 = Character.digit(digits.charAt(0), 10);
int digit2 = Character.digit(digits.charAt(1), 10);
int digit3 = Character.digit(digits.charAt(2), 10);
もちろん、整数の桁数が3桁を超える場合は、ループを使用する方が実用的です。
String sDigits = Integer.toString(num_1);
char[] cDigits = sDigits.toCharArray();
int[] digits = new int[cDigits.length];
for (int i = 0; i < cDigits.length; i++)
digits[i] = Character.digit(cDigits[i], 10);
上記のコードを配置すると、配列から数字を簡単に抽出できます。
int digit1 = digits[0];
int digit2 = digits[1];
int digit3 = digits[2];
配列内のすべての数字を収集し、さらに使用します
import Java.lang.Integer;
import Java.lang.String;
import Java.util.ArrayList;
import Java.util.List;
import Java.util.Arrays;
public class Test
{
public static void main(String[] args) {
Integer num = 12345;
Integer[] digits = getDigits(num.toString());
System.out.println(Arrays.toString(digits));
}
public static Integer[] getDigits(String number) {
List<Integer> digits = new ArrayList<Integer>();
for(int i = 0; i < number.length(); i++) {
int j = Character.digit(number.charAt(i), 10);
digits.add(j);
}
return digits.toArray(new Integer[]{});
}
}
出力は
[1, 2, 3, 4, 5]
以下は、純粋に数学的な方法です。
// Returns digit at pos
static int digitAt(int input, int pos){
int i =(int) (input%(Math.pow(10, pos)));
int j = (int) (i/Math.pow(10, pos-1));
return Math.abs(j); // abs handles negative input
}
たとえば、input = 1234
およびpos = 2
、次にi
は34
。 34
沿って 10
と四捨五入して3
。
それほどきれいではありませんが、動作します!
数字がどこから来ているのかを知るには:
return (x/10/10) + (x%10) + (x/10)%10;
String
変換のアイデアに満足せず、通常の順序で反復したい場合は、次を試してください:
int n = 123456789;
int digits = (int) Math.log10(n);
for (int i = (int) Math.pow(10, digits); i > 0; i /= 10) {
System.out.println(n / i);
n %= i;
}
出力は
1
2
3
4
5
6
7
8
9
このコードは、指定されたインデックスのニブルを返します。すべての桁を取得したい場合は、番号のすべてのインデックスを使用してこのメソッドを呼び出すことができます。数値の16進表記ではなく、10進表記では機能します。
public static int getNibble(int number, int nibbleIndex)
{
int nibble = 0;
while (nibbleIndex >= 0)
{
int division = number / 10;
nibble = number - division * 10;
number = division;
nibbleIndex--;
}
return nibble;
}
これで、文字列内の数字を文字間で単一にしようとする場合は、これで対処できます。
String string = "Th1s 1s n0t a number";
int newNum = Integer.parseInt(string.replaceAll("[\\D]", ""));
return newNum;
これは110
を返すはずです
また、これは私が本当に役に立ったと思ったスタックディスカッションへのリンクです。 Javaで文字列も含む文字列から整数を取得
String str = Integer.toString(num_1);
このstrから1、2、8を取得できます
String.valueOf(n).chars().forEach(i -> System.out.println((char) i))
n =整数