我有一个数组:
int test[]={10212,10202,11000,11000,11010};
我想将inetger值拆分为单个数字,并将它们作为单个元素放在一个新数组中,以便我的数组现在是:
int test2[]={1,0,2,1,2,1,0,2,0,2,1,1,0,0,0,1,1,0,0,0,1,1,0,1,0};
我将如何做到这一点?我在java中这样做。
谢谢。
答案 0 :(得分:10)
int[] test={10212,10202,11000,11000,11010};
ArrayList<Integer> test2 = new ArrayList<Integer>();
for(int i = test.length -1; i >= 0; i--){
int temp = test[i];
while(temp>0){
test2.add(0, temp%10); //place low order digit in array
temp = temp /10; //remove low order digit from temp;
}
}
通过将条目的最低位数字放入arraylist的“front”,并因此放在之前的低位数字/条目之前,这将完全符合您的要求。
如果需要它在Array中,ArrayList有一个toArray方法。
答案 1 :(得分:5)
您可以按照Mark的建议行事,或将其转换为String
以获取单个数字:
int test[]={10212,10202,11000,11000,11010};
ArrayList<Integer> test2 = new ArrayList<Integer>();
for (int i : test)
{
String str = String.valueOf(i);
for (int j = 0; j < str.length(); ++j)
test2.add((int)(str.charAt(j)-'0'));
}
由于更多内存有效的方法仍然涉及字符串,所以将所有数字保持为一个字符串并动态计算int
值:
class Digits
{
String str;
Digits(int[] nums)
{
StringBuilder sb = new StringBuilder();
for (int i : nums)
sb.append(String.valueOf(i));
str = sb.toString();
}
int length()
{
return str.length();
}
int nth(int i)
{
return (int)(str.charAt(i)-'0');
}
}
请注意 CheesePls 解决方案是正确的解决方案,因为它使用数学,因为它打算使用。我只是为了新手(而且只是为了解决这个问题)...
答案 2 :(得分:1)
几乎是单行(如果我们假设有一个开箱即用的功能,用于将字符串数组转换为整数数组):
int test[]={10212,10202,11000,11000,11010};
int result[] = strArray2IntArray (
Arrays.toString (test)
.replaceAll ("\\D", "")
.replaceAll ("(\\d)", "$1 ")
.split (" ")
);
private static int[] strArray2IntArray (String[] array) {
int[] result = new int[array.length];
for (int i = 0; i < result.length; i++) {
result[i] = Integer.parseInt (array[i]);
}
return result;
}
答案 3 :(得分:0)
你取每个整数,除以10并将分数与余数分开。将分数乘以10使其再次成为整数并将其放入新数组中。重复,直到用完数字。重复,直到输入数组中的整数用完为止。
答案 4 :(得分:0)
尝试这样的事情。
{
int test[]={10212,10202,11000,11000,11010};
int test2[] = new int[25];
int i = 24;
int temp;
for(int n = test.size() - 1; n >= 0; n--){
temp = test[n];
while(temp > 0){
test2[i--] = test % 10; // <= Gets remainder of division by 10.
test /= 10; // <= Stores the integer result of the division.
}
}
}
我还没有测试过这段代码。
此代码将忽略前导零(自然)并回填整数数组。获得适当的阵列大小可能是个问题。
答案 5 :(得分:0)
这(未经测试):
int test[] = {10212,10202,11000,11000,11010};
ArrayList<Integer> test2 = new ArrayList<Integer>();
for (int i : test)
{
int p = test2.size();
while (i > 0)
{
test2.add(p, i % 10);
i /= 10;
}
}
答案 6 :(得分:0)
这是用字符串做的一种方法。不是特别高效,但(我希望)容易理解。
package playground.tests;
import junit.framework.TestCase;
public class SplitIntegerTest extends TestCase {
public void testIntsFromOneInteger() throws Exception {
assertEqualArrays(new int[] { 1, 0, 2, 1, 2 }, intsFrom(10212));
}
public void testIntsFromArray() throws Exception {
int test[] = { 10212, 10202, 11000, 11000, 11010 };
int test2[] = { 1, 0, 2, 1, 2, 1, 0, 2, 0, 2, 1, 1, 0, 0, 0, 1, 1, 0,
0, 0, 1, 1, 0, 1, 0 };
assertEqualArrays(test2, intsFrom(test));
}
private int[] intsFrom(int[] input) {
int[][] list = new int[input.length][];
for (int i = 0; i < input.length; i++)
list[i] = intsFrom(input[i]);
int n = 0;
for (int[] array : list)
n += array.length;
int[] result = new int[n];
int index = 0;
for (int[] array : list)
for (int i : array)
result[index++] = i;
return result;
}
private static int[] intsFrom(Integer n) {
String s = n.toString();
int[] result = new int[s.length()];
for (int i = 0; i < result.length; i++)
result[i] = intFrom(s.charAt(i));
return result;
}
private static int intFrom(Character c) {
return Integer.parseInt(c.toString());
}
private static void assertEqualArrays(int[] a, int[] b) {
assertEquals(a.length, b.length);
for (int i = 0; i < b.length; i++)
assertEquals(a[i], b[i]);
}
}