我想使用JAVA将字符串分解为Int数组,
我不想要一个迭代数组
的每个元素的解决方案比类型转换为整数。
这有什么捷径吗?
答案 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);
没有迭代。
但严肃地说,任何解决方案都会在某些时候进行某种形式的迭代(或递归)。