Подтвердить что ты не робот

Преобразование String в массив int в java

У меня есть одна строка

String arr= "[1,2]";

ie "[1,2]" как одна строка

Как преобразовать этот arr в массив int в java

4b9b3361

Ответ 1

String arr = "[1,2]";
String[] items = arr.replaceAll("\\[", "").replaceAll("\\]", "").replaceAll("\\s", "").split(",");

int[] results = new int[items.length];

for (int i = 0; i < items.length; i++) {
    try {
        results[i] = Integer.parseInt(items[i]);
    } catch (NumberFormatException nfe) {
        //NOTE: write something here if you need to recover from formatting errors
    };
}

Ответ 2

Используя библиотеку потоков Java 8, мы можем сделать это однострочным (хотя и длинным):

String str = "[1, 2, 3, 4, 5, 6, 7, 8, 9, 0]";
int[] arr = Arrays.stream(str.substring(1, str.length()-1).split(","))
    .map(String::trim).mapToInt(Integer::parseInt).toArray();
System.out.println(Arrays.toString(arr));

substring удаляет скобки, split отделяет элементы массива, trim удаляет любые пробелы вокруг числа, parseInt анализирует каждый номер, и мы выгружаем результат в массив. Я включил trim, чтобы сделать это обратным к Arrays.toString(int[]), но это также будет анализировать строки без пробелов, как в вопросе. Если вам нужно всего лишь проанализировать строки из Arrays.toString, вы можете опустить trim и использовать split(", ") (обратите внимание на пробел).

Ответ 3

    final String[] strings = {"1", "2"};
    final int[] ints = new int[strings.length];
    for (int i=0; i < strings.length; i++) {
        ints[i] = Integer.parseInt(strings[i]);
    }

Ответ 4

Похоже, что JSON - это может быть чрезмерным, в зависимости от ситуации, но вы можете рассмотреть возможность использования библиотеки JSON (например, http://json.org/java/) для ее синтаксического анализа:

    String arr = "[1,2]";

    JSONArray jsonArray = (JSONArray) new JSONObject(new JSONTokener("{data:"+arr+"}")).get("data");

    int[] outArr = new int[jsonArray.length()]; 

    for(int i=0; i<jsonArray.length(); i++) {
        outArr[i] = jsonArray.getInt(i);
    }

Ответ 5

Ответ Saul может быть лучше реализован, разделив строку следующим образом:

string = string.replaceAll("[\\p{Z}\\s]+", "");
String[] array = string.substring(1, string.length() - 1).split(",");

Ответ 6

В жестких петлях или на мобильных устройствах не рекомендуется создавать много мусора через недолговечные объекты String, особенно при анализе длинных массивов.

Метод в моем ответе анализирует данные без генерации мусора, но он не обрабатывает неверные данные изящно и не может анализировать отрицательные числа. Если ваши данные поступают из ненадежного источника, вы должны выполнить дополнительную проверку или использовать одну из альтернатив, предоставленную в других ответах.

public static void readToArray(String line, int[] resultArray) {
    int index = 0;
    int number = 0;

    for (int i = 0, n = line.length(); i < n; i++) {
        char c = line.charAt(i);
        if (c == ',') {
            resultArray[index] = number;
            index++;
            number = 0;
        }
        else if (Character.isDigit(c)) {
            int digit = Character.getNumericValue(c);
            number = number * 10 + digit;
        }
    }

    if (index < resultArray.length) {
        resultArray[index] = number;
    }
}

public static int[] toArray(String line) {
    int[] result = new int[countOccurrences(line, ',') + 1];
    readToArray(line, result);
    return result;
}

public static int countOccurrences(String haystack, char needle) {
    int count = 0;
    for (int i=0; i < haystack.length(); i++) {
        if (haystack.charAt(i) == needle) {
            count++;
        }
    }
    return count;
}

Выполнение countOccurrences было бесстыдно украдено у Джона Скита

Ответ 7

Вы можете сделать это легко, используя класс StringTokenizer, определенный в пакете java.util.

void main()
    {
    int i=0;
    int n[]=new int[2];//for integer array of numbers
    String st="[1,2]";
    StringTokenizer stk=new StringTokenizer(st,"[,]"); //"[,]" is the delimeter
    String s[]=new String[2];//for String array of numbers
     while(stk.hasMoreTokens())
     {
        s[i]=stk.nextToken();
        n[i]=Integer.parseInt(s[i]);//Converting into Integer
       i++;
     }
  for(i=0;i<2;i++)
  System.out.println("number["+i+"]="+n[i]);
}

Выход: -number [0] = 1         Количество [1] = 2