Я хочу, чтобы разложить строку в Int массива с помощью JAVA,разлагать строку в массив междунар без петель Java
я не хочу решение, которое итерирует каждый элемент массива
чем напечатанный в целое ,
есть какие-либо недостатки для этого?
Я хочу, чтобы разложить строку в Int массива с помощью JAVA,разлагать строку в массив междунар без петель Java
я не хочу решение, которое итерирует каждый элемент массива
чем напечатанный в целое ,
есть какие-либо недостатки для этого?
Будешь должны перебирать на каждый символ вашей строки для достижения этой цели:
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]);
}
EDIT
Если вы действительно не хотите, не цикл:
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]));
Но придётся знайте число Integer, которое у вас есть, если вам не нужен цикл.
как написано в моем Вопросе, мне не нужен какой-либо цикл. решение, подобное Строка str = "123,456,789"; Список
@yogeshprajapati Можете ли вы дать нам причину этого? – talnicolas
@ talnicolas причина для этого у меня есть lacs записей, поэтому я не хочу, цикл для каждого. –
Насколько я знаю - нет. Нет простого способа сделать это, поскольку String - это просто char [], который только сопоставляется с целыми числами через ascii. Вы можете получить массив строк, предполагая, что у вас есть разделитель, затем ссылайтесь на каждый индекс массива String с помощью функции, которая преобразует String в int, но, откровенно говоря, вы делаете это намного сложнее для себя ...
например
String myEncodedInts = "7,14,12,9,3";
String[] myIntsAsStrings = myEncodedInts.split(",");
//...
int someReferenceAtSomeLaterPoint = Integer.parseInt(myIntsAsStrings[myReferenceIndex]);
Но нет никакого способа (что я знаю) просто преобразуя String [] к междунар [], который не только скрыть петлю внутри какой-либо другой метод ...
Я хочу весь элемент в списке
@yogeshprajapati Таким образом, вам не нужен массив int, но List, пожалуйста, исправьте свой вопрос. – talnicolas
Это неважно - до сих пор нет способа сделать это без петли. Возможно, если вы объясните, почему вам не нужен цикл, тогда мы могли бы решить что-то, чтобы избежать вашей причины не хотеть цикл. –
Нет петель (видимо) ... но действительно ли это стоило?
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 для усилий;) По-видимому, я предполагаю, что это по-прежнему зацикливается внутри, просто делая parseInt как часть цикла «Spliter»? –
Глядя на комментарий Yogesh добавил к Fellows @ Matt ответ:
'Я хочу весь элемент в списке. - yogesh prajapati '
Напишите пользовательскую реализацию списка, поддерживаемого массивом, и преобразует тип при доступе к элементам.
Ни один цикл в поле зрения ... но потом как @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);
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);
Там нет итераций.
Но серьезно люди, любое решение будет иметь некоторую форму итерации (или рекурсии) в какой-то момент.
Я не уверен, что следую, У вас есть 'String []', и вы хотите сделать его 'int []'? Или это 'String'' int [] '? Или вы хотите получить «Integer []»? Пожалуйста, будьте более конкретными, что * точно * вы пытаетесь достичь – amit
Какая строка у вас есть? Каким образом вы муравьете разлагаетесь? –
Почему ограничение на петлю? Выполнение этого путем цикла является наиболее вероятным решением. – Jim