2017-01-10 133 views
3

我已經做了幾個小時的研究,試圖找出如何將字符串數組轉換爲Int數組,但沒有運氣。如何將一個字符串數組轉換爲一個Int數組?

我正在製作一個程序,您可以使用三個轉子加密消息。我可以輸入消息並獲得第一個轉子(內轉子)的索引編號,以加密到第三個轉子(外轉子)中。問題是索引號是在一個字符串數組中,我希望它成爲一個int數組。

是的,我已經試過

int[] array == Arrays.asList(strings).stream() 
     .mapToInt(Integer::parseInt).toArray(); 

或任何形式的那個。我不確定自己是否有java 8,因爲它不起作用,但它給了我一個錯誤。如何將字符串數組轉換爲Int數組?

public void outerRotorEncrypt(){ 


String indexNumberSpilt [] = indexNumber.split(" "); 

System.out.println("indexNumber length: " + indexNumber.length()); //test 
System.out.println("indexNumberSpilt length: " + indexNumberSpilt.length); //test 
System.out.println("Index Number Spilt: " + indexNumberSpilt[3]); //test 
System.out.println(""); 


System.out.println(""); 
System.out.println("testing from outerRotorEncrypt"); 
System.out.println(""); 



for(int i = 1; i < indexNumberSpilt.length; i++){ 


    secretMessage = secretMessage + defaultOuterRotorCharacterArray[indexNumberSpilt[i]]; 



} 

System.out.println("Secret Message from outerRotorEncrypt: " + secretMessage); 
+1

如果」重新運行Java 8,你的第一次嘗試應該工作,請張貼錯誤消息。 – Maroun

+0

如果有的話,你的'outerRotorEncrypt'方法是如何與這個問題相關的? –

+0

@MarounMaroun'異常在線程 「主」 java.util.InputMismatchException \t在java.util.Scanner.throwFor(Scanner.java:864) \t在java.util.Scanner.next(Scanner.java:1485) \t在java.util.Scanner.nextInt(Scanner.java:2117) \t在java.util.Scanner.nextInt(Scanner.java:2076) \t在EnigmaClient.introduction(EnigmaClient.java:91) \t在EnigmaClient .main(EnigmaClient.java:15)' –

回答

2

如果您正在使用Java8比這是解決這個問題的簡單方法。

List<?> list = Arrays.asList(indexNumber.split(" ")); 
list = list.stream().mapToInt(n -> Integer.parseInt((String) n)).boxed().collect(Collectors.toList()); 

在第一行你正在服用的一個泛型列表對象和你的數組轉換成列表,並比使用流API相同的列表將充滿相當於整數值。

+0

它告訴我 「1.8.0_111」 是Java 8? –

+0

@AllenTran。是的我的Java 8,肯定工作。 – Darshit

+0

我可能有一個「」之前的字符串數組,無法從拆分中刪除,這就是爲什麼它不能轉換爲一個int ..「 –

1
static int[] parseIntArray(String[] arr) { 
    return Stream.of(arr).mapToInt(Integer::parseInt).toArray(); 
} 

因此,採取的字符串[]的流。使用mapToInt爲每個元素調用Integer.parseInt並將其轉換爲int。然後只需在生成的IntStream上調用toArray來返回數組。

+0

OP說這不適合他,你的回答有幫助嗎? – Maroun

1

您是否嘗試過:

int[] array = new int[indexNumberSpilt.lenght()]; 
for (int i=0;i<indexNumberSpilt.lenght();i++){ 
    array[i] = Integer.valueOf(indexNumberSpilt[i]); 
} 
+0

'線程中的異常「main」java.lang.NumberFormatException:對於輸入字符串:「」 \t at java.lang.NumberFormatException.forInputString(NumberFormatException。的java:65) \t在java.lang.Integer.parseInt(Integer.java:592) \t在java.lang.Integer.valueOf(Integer.java:766) \t在Enigma.outerRotorEncrypt(Enigma.java:160 ) \t在Enigma.innerRotorEncrypt(Enigma.java:131) \t在Enigma.secretMessage(Enigma.java:85) \t在Enigma.isRotorValid(Enigma.java:59) \t在EnigmaClient.introduction(EnigmaClient.java :102) \t在EnigmaClient.main(EnigmaClient.java:15) ' –

1
int[] array == Arrays.asList(strings).stream() 
     .mapToInt(Integer::parseInt).toArray(); 

之所以它給了一個錯誤是因爲==,改變,要=(賦值運算符)應該工作,如:

String[] input = new String[]{"1", "2"}; 
int[] array = Arrays.asList(input).stream() 
     .mapToInt(Integer::parseInt).toArray(); 
for(int a : array){ 
    System.out.println(a); 
} 
0

小的演示

String[] string = { "0", "1", "11", "0", "0", "1", "11", "0", "0", "1", 
      "11", "0" }; 
    List<String> temp = Arrays.asList(string); 
    List<Integer> temp1 = new ArrayList<Integer>(); 
    for (String s : temp) { 
     temp1.add(Integer.parseInt(s)); 
    } 

    int[] ret = new int[temp1.size()]; 
    for (int i = 0; i < ret.length; i++) { 
     ret[i] = temp1.get(i).intValue(); 
    } 

    System.out.println(Arrays.toString(ret)); 
} 
相關問題