Saya punya satu string
String arr= "[1,2]";
yaitu "[1,2]" seperti string tunggal
Bagaimana cara mengubah arr ini menjadi 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
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).
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);
}
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(",");
coba yang ini, mungkin bisa membantu Anda
String arr= "[1,2]";
int[] arr=Stream.of(str.replaceAll("[\\[\\]\\, ]", "").split("")).mapToInt(Integer::parseInt).toArray();
"[123, 456]"
- person Olivier Grégoire; 04.11.2018
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
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
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.
[1313, 1314, 1315]
, tanpa mengganti spasi saya akan mendapatkan int[] sebagai [1313, 0, 0]
- person Tomas; 18.01.2016
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
[1,2]
bukan string yang valid, dan kode yang menjadi dasar seluruh pertanyaan bukanlah java yang valid. - person The Pellmeister   schedule 28.10.2013String
yang memiliki format berikut: [#,#,#,#,...,#] menjadiint[]
- person Alex Semeniuk   schedule 23.01.2014