Konversi String ke array int di java

Saya punya satu string

String arr= "[1,2]";

yaitu "[1,2]" seperti string tunggal

Bagaimana cara mengubah arr ini menjadi array int di java


person Deepak Kumar    schedule 04.10.2011    source sumber
comment
Kode contoh Anda tidak dapat dikompilasi. Tolong perbaiki. Karena itu, lihat StringTokenizers: download.Oracle .com/javase/6/docs/api/java/util/   -  person Kilian Foth    schedule 04.10.2011
comment
Apakah Anda sudah jelas tentang apa yang sebenarnya ingin Anda lakukan?   -  person Mohamed Saligh    schedule 04.10.2011
comment
Mengapa 8 suara tidak setuju...??   -  person Gokul Nath KP    schedule 18.10.2013
comment
Karena pertanyaannya tidak jelas. [1,2] bukan string yang valid, dan kode yang menjadi dasar seluruh pertanyaan bukanlah java yang valid.   -  person The Pellmeister    schedule 28.10.2013
comment
Tidak mengerti mengapa pertanyaan ini tidak disukai. Sangat jelas: ubah String yang memiliki format berikut: [#,#,#,#,...,#] menjadi int[]   -  person Alex Semeniuk    schedule 23.01.2014
comment
Pertanyaan yang berguna dan jelas yang perlu saya jawab, nanti. Tampilan 50K+ saat ini cukup menunjukkan kualitas pertanyaan. +1.   -  person La-comadreja    schedule 29.06.2014


Jawaban (9)


Dengan menggunakan pustaka aliran Java 8, kita dapat membuat ini menjadi satu baris (meskipun berupa garis panjang):

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 menghapus tanda kurung, split memisahkan elemen array, trim menghapus spasi di sekitar angka, parseInt mem-parsing setiap angka, dan kita membuang hasilnya ke dalam array. Saya telah menyertakan trim untuk menjadikannya kebalikan dari Arrays.toString(int[]), tetapi ini juga akan mengurai string tanpa spasi, seperti pada pertanyaan. Jika Anda hanya perlu mengurai string dari Arrays.toString, Anda dapat menghilangkan trim dan menggunakan split(", ") (perhatikan spasinya).

person Jeffrey Bosboom    schedule 15.09.2014
comment
Terima kasih telah menambahkan ini sebagai jawaban - person Bugs Happen; 11.10.2015

Sepertinya JSON - mungkin berlebihan, bergantung pada situasinya, namun Anda dapat mempertimbangkan untuk menggunakan pustaka JSON (mis. http://json.org/java/) untuk menguraikannya:

    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);
    }
person mseebach    schedule 04.10.2011

Jawaban Saul dapat diimplementasikan dengan lebih baik dengan memisahkan string seperti ini:

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

coba yang ini, mungkin bisa membantu Anda

String arr= "[1,2]";
int[] arr=Stream.of(str.replaceAll("[\\[\\]\\, ]", "").split("")).mapToInt(Integer::parseInt).toArray();
person Deepesh Kumar    schedule 03.11.2018
comment
Hai, selamat datang di StackOverflow. Mengingat ini adalah pertanyaan yang cukup lama, dengan banyak jawaban populer, harap edit pertanyaan Anda untuk menjelaskan jawaban Anda yang tidak disediakan oleh jawaban yang sudah ada. Terima kasih. - person MandyShaw; 04.11.2018
comment
Jawaban Anda tidak berfungsi dengan baik dengan entri seperti "[123, 456]" - person Olivier Grégoire; 04.11.2018
comment
silakan periksa sekarang! - person Deepesh Kumar; 04.11.2018
comment
Menurut saya maksud @OlivierGrégoire adalah bahwa kode hanya berfungsi jika setiap elemen terdiri dari satu digit. Tapi itu hanya membutuhkan sedikit perubahan: Stream.of(str.replaceAll("[\\[\\]\\ ]", "").split(",")).mapToInt(Integer::parseInt).toArray() - person David Easley; 08.12.2019

Anda dapat melakukannya dengan mudah menggunakan kelas StringTokenizer yang ditentukan dalam paket 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]);
}

Keluaran :-angka[0]=1 angka[1]=2

person Community    schedule 08.02.2015

Dalam loop ketat atau pada perangkat seluler, bukanlah ide yang baik untuk menghasilkan banyak sampah melalui objek String yang berumur pendek, terutama saat mengurai array yang panjang.

Metode dalam jawaban saya mem-parsing data tanpa menghasilkan sampah, tetapi tidak menangani data yang tidak valid dengan baik dan tidak dapat mengurai angka negatif. Jika data Anda berasal dari sumber yang tidak tepercaya, Anda harus melakukan validasi tambahan atau menggunakan salah satu alternatif yang disediakan dalam jawaban lain.

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;
}

implementasi countOccurrences dicuri tanpa malu-malu dari John Skeet

person Juozas Kontvainis    schedule 12.12.2014

Jika Anda lebih memilih array Integer[] daripada array int[]:

Bilangan Bulat[]

String str = "[1,2]";
String plainStr = str.substring(1, str.length()-1); // clear braces []
String[] parts = plainStr.split(","); 
Integer[] result = Stream.of(parts).mapToInt(Integer::parseInt).boxed().toArray(Integer[]::new);

int[]

String str = "[1,2]";
String plainStr = str.substring(1, str.length()-1); // clear braces []
String[] parts = plainStr.split(","); 
int[] result = Stream.of(parts).mapToInt(Integer::parseInt).toArray()

Ini berfungsi untuk Java 8 dan lebih tinggi.

person flavio.donze    schedule 09.06.2020

person    schedule
comment
Anda tuan, pantas mendapatkan medali! terima kasih banyak!! string saya terlihat seperti ini: [[1,2],[11,5]...] - person Thomas Schwärzl; 12.08.2012
comment
ini berfungsi dengan baik, saya hanya perlu menambahkan .replaceAll( , ) karena string saya memiliki spasi di antara angka misalnya [1313, 1314, 1315] , tanpa mengganti spasi saya akan mendapatkan int[] sebagai [1313, 0, 0] - person Tomas; 18.01.2016
comment
String[] items = arr.replaceAll("\\[", "").replaceAll("\\]", "").replaceAll("\\s", "").split(","); bisa diganti dengan String[] items = arr.replaceAll("\\[|\\]|\\s|,", "") Baru saja menyelesaikan kelas regex saya :) - person evuazeze; 20.04.2021

person    schedule
comment
Cara ringkas yang bagus untuk mengimplementasikan ini. Saya benar-benar kecewa karena Java tampaknya belum memikirkan satu baris di salah satu perpustakaannya untuk ini. - person La-comadreja; 29.06.2014