разбиение строки на массив целых - PullRequest
2 голосов
/ 15 декабря 2011

У меня есть строка s = "1,2,3,4,5". Я использую метод split () для разделения строки, затем я хочу сохранить ее в массиве целых чисел.
Я пытался сделать следующее, но это не работает.

int i[]=Integer.parseInt(s.split(","));

Я хочу знать, возможно ли это сделать без использования цикла.

В C # есть что-то наподобие Array.convertAll, но я не знаю ничего подобного в Java.

Ответы [ 5 ]

1 голос
/ 15 декабря 2011

В Java нет такого способа (метода), с помощью которого вы можете напрямую получить int array, передав String array
Так что вы должны написать какой-то метод, чтобы сделать это ...
, и если естьусловие, что вам не нужно использовать цикл, тогда ... я пишу код, добавив еще немного кода в Adel Boutros, вы можете получить помощь от этого, но лучше для вас цикл ..:)

public class Test {
public static void main(String[] args) {
    String s = "1,2,3,4,5";
    int size = 0;
    int[] arr = new int[s.split(",").length];
    findInt(s, arr, size);
    for (int i = 0; i < arr.length; i++) {

        System.out.println(arr[i]);
    }
}

static void findInt(String s, int[] arr, int index) {
    String aa = null;
    if (s == null) {
        return;
    }
    if (s.length() != 1) {
        String text = s.substring(0, s.indexOf(","));
        arr[index] = Integer.parseInt(text);
    } else {
        arr[index] = Integer.parseInt(s);
    }
    if (s.length() != 1) {
        aa = s.substring(s.indexOf(",") + 1, s.length());
    }
    findInt(aa, arr, ++index);
}

}
0 голосов
/ 15 декабря 2011

Этот, вероятно, провалит ваше состязание, но он действительно избегает цикла:)

public static void main(String[] args) throws Exception {
    ScriptEngineManager mgr = new ScriptEngineManager();
    ScriptEngine jsEngine = mgr.getEngineByName("JavaScript");
    String s = "1,2,3,4,5";
    String s1 = s.replaceAll("(\\d+),?", "arr[i++]=$1;");
    int[] arr = new int[s.split(",").length];
    jsEngine.put("arr", arr);
    jsEngine.eval("var i=0;" + s1);
}

В результате получается int[], заполненный числами из вашей строки.

0 голосов
/ 15 декабря 2011

В чистой Java нет способа сделать это.

В Apache Commons (особенно Commons Lang) есть утилиты преобразования, которые принимают функцию только с массивом и выполняют то, что вам нужно, вам не нужно кодировать цикл самостоятельно.

0 голосов
/ 15 декабря 2011
public static void main (String []args) {
    String s="1,2,3,4,5";
    int size = 0;
    int [] arr = new int [s.length];
    findInt(s, arr, size);
}

void findInt(String s, int [] arr, int index) {
    if (s.isEmpty()) {
        return;
    }
    String text = s.substring(0,s.indexOf(","));
    arr[index] = Integer.parseInt(text);
    findInt(text.substring(1), arr, ++index);
}

PS: Мой метод использует рекурсивный подход. Размер переменной будет фактическим размером массива int.

0 голосов
/ 15 декабря 2011

Если вы не хотите использовать цикл, вы можете вызвать метод, который сделает цикл за вас.

например. (Вам нужно написать метод convertToInts)

int[] ints = convertToInts(s);
...