在没有循环java的情况下将字符串分解为int数组

时间:2012-04-03 13:06:45

标签: java

我想使用JAVA将字符串分解为Int数组,

我不想要一个迭代数组

的每个元素的解决方案

比类型转换为整数。

这有什么捷径吗?

6 个答案:

答案 0 :(得分:2)

没有循环(可见)......但它真的值得吗?

import static org.hamcrest.MatcherAssert.assertThat;
import org.hamcrest.collection.IsArrayContainingInOrder;
import com.google.common.base.Function;
import com.google.common.base.Splitter;
import com.google.common.collect.Iterables;

@Test
public void testDecompose() {
    final String input = "1,2,3,4";
    Integer arr [] = Iterables.toArray(Iterables.transform(Splitter.on(",").split(input), new Function<String,Integer>(){
        @Override public Integer apply(String input) {
            return Integer.parseInt(input);
        }}), Integer.class);
    assertThat(arr, IsArrayContainingInOrder.arrayContaining(1,2,3,4));
}

要获得Collection<Integer>List<Integer>它更简单 - 因为您将从Iterable<Integer>获得transform

@Test
public void testDecompose() {
    final String input = "1,2,3,4";
    List<Integer> l = Lists.newArrayList(Iterables.transform(Splitter.on(",").split(input), new Function<String,Integer>(){
        @Override public Integer apply(String input) {
            return Integer.parseInt(input);
        }}));
    assertThat(l, IsCollectionContaining.hasItems(1,2,3,4));
}

答案 1 :(得分:2)

看不到一个循环...但是当@Nick指出时......你可能需要学习一些关于递归的知识:

private static void getNumbers(List<String> asList, List<Integer> myList) {
    if (asList.isEmpty()) {
        return;
    } else {
        String remove = asList.remove(0);
        myList.add(Integer.parseInt(remove));
        getNumbers(asList, myList);
    }

}

调用代码:

    String numbers = "1,2,3,4,5,6,7,8,9";
    List<String> inputList = new ArrayList<String>();
    inputList.addAll(Arrays.asList(numbers.split(",")));
    List<Integer> outputList = new ArrayList<Integer>();

    getNumbers(inputList, outputList);

    System.out.println(outputList);

答案 2 :(得分:1)

您必须迭代String的每个字符才能实现:

String str = "1234";
int[] array = new int[str.length()];

for (int i = 0; i < str.length(); i++) {
    array[i] = Character.digit(str.charAt(i), 10);
    // or
    // array[i] = Integer.parseInt(str[i]);
}

修改

如果你真的不想要循环:

String str = "123,456,789";
String[] arr = str.split(",");

ArrayList<Integer> list = new ArrayList<Integer>();

list.add(Integer.parseInt(arr[0]));
list.add(Integer.parseInt(arr[1]));
list.add(Integer.parseInt(arr[2]));

但你必须先知道你拥有的整数,如果你不需要循环。

答案 3 :(得分:1)

据我所知 - 没有。没有简单的方法可以做到这一点,因为String只是一个char [],它只通过ascii映射到整数。你可以得到一个字符串数组,假设你有一个分隔符,然后引用String数组的每个索引,并使用一个将String转换为int的函数,但坦率地说,你让自己变得更难......

e.g。

String myEncodedInts = "7,14,12,9,3";
String[] myIntsAsStrings = myEncodedInts.split(",");
//...
int someReferenceAtSomeLaterPoint = Integer.parseInt(myIntsAsStrings[myReferenceIndex]);

但是没有办法(我知道)将String []转换为int [],而不仅仅是将循环隐藏在其他方法中......

答案 4 :(得分:0)

评论评论Yogesh已经加入@Matt Fellows回答:

'我想要列表中的所有元素。 - yogesh prajapati '

编写由数组支持的List的自定义实现,并在访问项目时进行类型转换。

答案 5 :(得分:0)

public toInts(String[] strings, int[] ints, int start) {
    if (start > strings.length - 2) {
        return;
    }
    ints[start] = Integer.parseInt(strings[start]);
    toInts(string, ints, start+1);
}
...
int[] ints = new int[3];
String[] strings = new String[]{"1", "2", "3"};
toInts(strings, ints, 0);

没有迭代。

但严肃地说,任何解决方案都会在某些时候进行某种形式的迭代(或递归)。