2012-04-17 108 views
1

我写这样的:有没有更好的(更快)的方法来将数字分成数字?

void blah(int num) 
{ 
    int numOfDigits = Math.log10(num); 
    int arr[] = new int[numOfDigits + 1]; 
    for(int i = numOfDigits; i>0; i--) 
    { 
     arr[i] = num%10; 
     num = num/10; 
    } 
} 

但我认为必须有这样做的更优雅的方式。在那儿?如果你想从这个去int[]

String[] arr = Integer.toString(num).split("(?<=\\d)"); 

int[] arrint = new int[arr.length]; 
for (int i = 0; i < arr.length; i++) 
    arrint[i] = Integer.parseInt(arr[i]); 
+0

这个方法不起作用 - 这是马车。你需要从i = numOfDigits - 1开始; – 2012-04-17 00:27:58

+0

可能的重复[有没有在j2se或雅加达的公共资源,这将数字转换为数组数组?](http://stackoverflow.com/questions/1213375/is-there-something-in-j2se-or-jakarta -commons-thats-converted-a-number-to-an-arra) – 2012-04-17 00:28:02

+0

@EugeneRetunsky:对不起,这是一个错字。 – noMAD 2012-04-17 00:29:36

回答

2

如果你满意的字符串,你可以这样做然后使用string.toCharArray()并转换回来。根据您的世界观,这可能会也可能不会更“优雅”。

+0

是基于RegEx的分隔符? – noMAD 2012-04-17 00:31:17

+0

yes - split()使用正则表达式来分割。 '(?<= \\ d)'表示“前一个字符是一个数字”。我测试了它,它能正常工作 – Bohemian 2012-04-17 00:32:16

+0

这是否比问题使用的循环方法更快(忽略了一些问题)? – 2012-04-17 00:43:01

0

考虑整数转换为使用Integer.toString字符串

+0

你不能投射不同类型的数组:() – Bohemian 2012-04-17 00:30:02

+0

@波希米亚感谢,修正。 – cmh 2012-04-17 00:31:19

+0

是的,这就是我的想法。你能详细说一下'转换回来的部分吗?' – noMAD 2012-04-17 00:37:12

0

这可能是一个办法(我不看好这个超级骄傲:))

Integer number = 1234567890;    // input number 
String temp = number.toString();   // convert to string 
int [] output = new int[temp.length()]; 

for (int i=0 ; i< temp.length(); i++)  // get character at index i from string 
    output[i] = temp.charAt(i) - '0';  // convert it to number by removing '0' 
相关问题