Mam jeden ciągKonwersja String na int tablicy w java
String arr= "[1,2]";
czyli "[1,2]" jest jak jeden ciąg
Jak przekonwertować to arr int tablicy w java
Mam jeden ciągKonwersja String na int tablicy w java
String arr= "[1,2]";
czyli "[1,2]" jest jak jeden ciąg
Jak przekonwertować to arr int tablicy w java
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
};
}
sir, zasłużyć na medal! Dziękuję bardzo!!mój ciąg wyglądał tak: [["1", "2"], ["11", "5"] ...] – Thomas
to działało dobrze, po prostu musiałem dodać .replaceAll ("", "") jako mój ciąg miał spacje między liczbami, np. "[1313, 1314, 1315]", bez zastępowania spacji dostałbym moje int [] jako '[1313, 0, 0]' – Tomas
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]);
}
Niezwykle zwięzły sposób na zaimplementowanie tego. Zdecydowanie jestem jednak rozczarowany, że Java najwyraźniej nie pomyślała o jednej linijce w jednej z jej bibliotek. –
wygląda JSON - to może być przesada, w zależności od sytuacji, ale można rozważyć przy użyciu biblioteki JSON (np http://json.org/java/), aby go przetworzyć:
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);
}
Korzystanie strumienia biblioteki Java 8, możemy zrobić to jedno-liner (choć długiej linii):
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
usuwa wsporniki, split
oddziela tablicę elements, trim
usuwa wszelkie spacje wokół numeru, parseInt
analizuje każdy numer, a my zrzucamy wynik w postaci tablicy. Zawarłem trim
, aby uczynić to odwrotnością Arrays.toString(int[])
, ale będzie to również analizować ciągi bez spacji, jak w pytaniu. Jeśli potrzebujesz tylko do analizy łańcuchów od Arrays.toString
, możesz pominąć trim
i użyć split(", ")
(zwróć uwagę na spację).
Sprytny. Wygląda jak kod golfa! – voidHead
Dziękujemy za dodanie tej odpowiedzi –
W ciasnych pętlach lub na urządzeniach przenośnych nie jest dobrym pomysłem generowanie dużej ilości śmieci poprzez krótkotrwałe obiekty String
, szczególnie podczas analizowania długich tablic.
Metoda w mojej odpowiedzi analizuje dane bez generowania śmieci, ale nie radzi sobie z niepoprawnymi danymi i nie może analizować liczb ujemnych. Jeśli Twoje dane pochodzą z niezaufanego źródła, powinieneś przeprowadzić dodatkową walidację lub użyć jednej z alternatyw podanych w innych odpowiedziach.
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 implementation was shamelessly stolen from John Skeet
Można to łatwo zrobić za pomocą klasy StringTokenizer zdefiniowany w pakiecie 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]);
}
wyjściowa: -liczba [0] = 1 numer [1] = 2
odpowiedź Saula może być lepiej realizowane dzielenie ciąg tak:
string = string.replaceAll("[\\p{Z}\\s]+", "");
String[] array = string.substring(1, string.length() - 1).split(",");
pisać poprawną przykład java . –
czy to jest zadanie domowe? –
Twój przykładowy kod nie jest kompilowany. Proszę napraw to. To powiedziawszy, spójrz na StringTokenizers: http://download.oracle.com/javase/6/docs/api/java/util/StringTokenizer.html –