所以,如果我有一个输入的整数:
int num_1 = 128
我如何能够解析数字并获得1,2和8,并将它们分配给不同的变量?
谢谢!
答案 0 :(得分:17)
执行此操作的低效方法是将整数转换为字符串并迭代字符串字符。
更有效的方式是:
int n = 128;
while (n > 0) {
int d = n / 10;
int k = n - d * 10;
n = d;
System.out.println(k);
}
答案 1 :(得分:6)
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数组
答案 2 :(得分:4)
试
while (num_1> 0){
int digit = num_1%10;
num_1 = num_1/10;
System.out.println(digit);
}
答案 3 :(得分: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
答案 4 :(得分:3)
将其转换为字符串并逐个字符地输入数字:
char[] digits = String.valueOf(num_1).toCharArray();
答案 5 :(得分:3)
这是一种方式:
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);
当然,如果整数有三位以上,使用循环会更实用:
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];
答案 6 :(得分: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]
答案 7 :(得分: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 = 1234
和pos = 2
,则i
为34
。我们将34
除以10
并四舍五入得到3
。
不是很漂亮,但有效!
答案 8 :(得分:1)
String str = Integer.toString(num_1);
你可以从这个str获得1,2,8
答案 9 :(得分:1)
此代码返回给定索引处的半字节。如果要获取所有数字,可以使用所有数字索引调用此方法。它不适用于数字的十六进制表示,而是十进制表示。
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;
}
答案 10 :(得分:1)
现在,如果你试图在字母中输出一个字符串中的数字,那么这应该照顾它。
String string = "Th1s 1s n0t a number";
int newNum = Integer.parseInt(string.replaceAll("[\\D]", ""));
return newNum;
这应该返回110
此外,这里是我发现非常有用的堆栈讨论的链接。 Get int from String, also containing letters, in Java
答案 11 :(得分: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
答案 12 :(得分:1)
要知道数字来自哪里,我会去:
return (x/10/10) + (x%10) + (x/10)%10;
答案 13 :(得分:1)
我认为您可以使用此解决方案:
int getDigit(int num,int location){
return BigDecimal.valueOf(num/Math.pow(10,position)).intValue() %10;
}
在此解决方案中,将发生以下情况,由于使用 Math 返回一个双精度数,因此您将发送一个数字,我们需要将其再次转换为我们使用 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) );
享受
答案 14 :(得分:0)
String.valueOf(n).chars().forEach(i -> System.out.println((char) i))
其中n =整数