2014-07-08 76 views
2

我有以下代碼:如何拆分字符串並將拆分值分配給數組?

public static void main(String[] args) { 

    String Delimiter = "#"; 
    Scanner scan = new Scanner(System.in); 


    System.out.println("Type in the number of names that you would like to store."); 
    int n = scan.nextInt(); 

    System.out.println("Input the " +n+" names in the following format: " 
      + "name/lastname#"); 

    String theNames = scan.next(); 

    Scanner strScan = new Scanner(theNames); 
    strScan.useDelimiter(Delimiter); 

    String [] s = new String[n]; 

    Name [] testArray = new Name[n]; 


    int i=0; 
    while(strScan.hasNext()){ 

     s[0]= strScan.next().split("/"); 
     s[1]= strScan.next().split("/"); 
     testArray[i]=new Name(s[0],s[1]); 
     i++; 

    } 

的問題是,我不能分割的姓名和由「/」分隔的姓氏。我想將s [0]分配給名字,將s [1]分配給姓。

+0

你有一個邏輯上的錯誤在你的代碼。您要求「n」作爲名/姓對的數量,但用它來初始化用於存儲名和姓的數組。如果在名稱數量問題上輸入1,則代碼將失敗並顯示'ArrayIndexOutOfBoundsException' – blackbuild

回答

1

在你的代碼中你有雙重錯誤:編譯錯誤和邏輯錯誤。當你撥打

s[0]= strScan.next().split("/"); 
    s[1]= strScan.next().split("/"); 

它會給出編譯錯誤,split(「/」)方法返回一個String數組。 如果我們假設你做

s[0]= strScan.next().split("/")[0]; 
    s[1]= strScan.next().split("/")[1]; 

那麼你將以秒得到[0]的第一人的fisrtname,並在S [1]第二人的姓氏。

你必須調用,而不是

String[] datas=strScan.next().split("/"); 
s[0]=data[0]; 
s[1]=data[1]; 

或只是

s=strScan.next().split("/"); 
+0

第三個代碼塊('s [2]'而不是's [1]')存在拼寫錯誤。也看到我對這個問題的評論,'s'被錯誤初始化。然而,你的簡短例子(第四代碼部分)將是充分和正確的。 – blackbuild

+0

是的,它完成了:)。 – Mifmif

0
String[] arr= theNames.split("/") 
s[0]= aar[0] 
s[1]= arr[1]; 
0

Split返回數組使用索引,以便獲取值[0],[1]

while(strScan.hasNext()){ 

     s[0]= strScan.next().split("//")[0]; 
     s[1]= strScan.next().split("//")[1]; 
     testArray[i]=new Name(s[0],s[1]); 
     i++; 

    } 

但是你並不需要把它放在另一個數組,分裂自己返回數組。