Java中int的数字提取
如果我有一个输入的整数:Java中int的数字提取,java,string,parsing,integer,Java,String,Parsing,Integer,如果我有一个输入的整数: int num_1 = 128 我怎样才能解析数字,得到1、2和8,并将它们分配给不同的变量 谢谢 将其转换为字符串,并逐字符输入数字: char[] digits = String.valueOf(num_1).toCharArray(); 这里有一个方法: String digits = Integer.toString(num_1); int digit1 = Character.digit(digits.charAt(0), 10); int digit2
int num_1 = 128
我怎样才能解析数字,得到1、2和8,并将它们分配给不同的变量
谢谢 将其转换为字符串,并逐字符输入数字:
char[] digits = String.valueOf(num_1).toCharArray();
这里有一个方法:
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);
试一试
你可以从这个str中获得1,2,8。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
}
int[]位=新的int[charNums.length];
对于(inti=0;i来说,执行此操作的低效方法是将整数转换为字符串并迭代字符串字符
更有效的方法是:
int n = 128;
while (n > 0) {
int d = n / 10;
int k = n - d * 10;
n = d;
System.out.println(k);
}
收集数组中的所有数字并进一步使用
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[]{});
}
}
以下是一种纯粹的数学方法:
// 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
这段代码返回给定索引处的半字节。如果要获取所有数字,可以使用数字的所有索引调用此方法。它不适用于数字的十六进制表示形式,而适用于十进制表示形式
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
此外,这里还有一个指向堆栈讨论的链接,我发现它非常有用。
如果您不喜欢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
要知道数字的来源,我会:
return (x/10/10) + (x%10) + (x/10)%10;
Java8解决方案
String.valueOf(n.chars().forEach(i->System.out.println((char)i))
其中n=整数您不需要编写三个方法来执行两个模数和除法运算。我将尝试在一个方法中修改代码并进行更新。或者给出建议您还可以解释为什么将其转换为字符串并对其进行迭代效率较低吗?转换本身所做的工作与您所做的类似t由我的函数定义。所以您将执行类似的操作,然后运行第二个循环,该循环可能会更大,因为数字作为字符串通常需要更长的时间(32位数字可以是10个字符)。实际上,您可以用int k=n%10
替换int k=n-d*10
。我想我希望代码能够最大程度地清晰而不是紧凑。请补充一些关于如何解决问题的解释。
// 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
}
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;
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
return (x/10/10) + (x%10) + (x/10)%10;