11

したがって、入力された整数がある場合:

int num_1 = 128

数値を解析して 1、2、8 を取得し、それらを別の変数に割り当てるにはどうすればよいでしょうか?

ありがとう!

4

15 に答える 15

19

これを行う非効率的な方法は、整数を文字列に変換し、文字列の文字を反復処理することです。

より効率的な方法は次のようになります。

int n = 128;
while (n > 0) {
  int d = n / 10;
  int k = n - d * 10;
  n = d;
  System.out.println(k);
}
于 2013-09-28T03:51:56.293 に答える
7

Thilo が書いた答えは良いですが、不完全です。まず、次のようにします。

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 配列として保持するようになりました

于 2013-09-28T03:50:46.553 に答える
5

試す

while (num_1> 0){
            int digit = num_1%10;
            num_1 = num_1/10;
            System.out.println(digit);
        }
于 2013-09-28T03:49:47.407 に答える
4
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
于 2013-09-28T03:53:56.223 に答える
3

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];
于 2013-09-28T03:49:46.977 に答える
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]
于 2013-09-28T03:57:55.237 に答える
2

これを行うための純粋に数学的な方法を次に示します。

// 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 = 1234pos = 2の場合iは です34。を で割り、四捨五入3410て を取得し3ます。

それほどきれいではありませんが、機能します!

于 2015-06-17T21:27:32.423 に答える
1
String str = Integer.toString(num_1);

この str から 1,2,8 を取得できます

于 2013-09-28T03:50:14.947 に答える
1

文字列の中の数字を特定しようとしている場合は、これで問題ありません。

String string = "Th1s 1s n0t a number";

int newNum = Integer.parseInt(string.replaceAll("[\\D]", ""));
return newNum;

これは戻るはずです110

また、スタック ディスカッションへのリンクもあり、とても役に立ちました。 文字を含む String から int を Java で取得する

于 2016-03-31T18:56:34.630 に答える
1

このソリューションを使用できると思います:

int getDigit(int num,int location){
    return BigDecimal.valueOf(num/Math.pow(10,position)).intValue() %10;
  }

このソリューションでは、次のようになります。Math を使用して double を返す数値を送信している場合、BigDecimal を使用して整数に再度変換する必要があります。主なアイデアまたはロジックは、数値のプレフィックスを返す位置を持つ Math.pow であり、モジュールはもう一方の端を切り刻みます。次のサンプルで確認できます。

    System.out.println(getDigit(123456,1));
    System.out.println(getDigit(123456,2));
    System.out.println(getDigit(123456,3));
    System.out.println(getDigit(123456,4));
    System.out.println(getDigit(123456,5));
    System.out.println(getDigit(123456,10) );  

楽しみ

于 2021-07-06T13:42:08.507 に答える
1

変換の考え方が気に入らず、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 
于 2016-05-04T14:50:21.730 に答える