2014-03-25 80 views
0

我有以下數據存儲爲大字符串。Java字符串拆分以從大字符串中獲取單個數據

"John Chips Monday \n" 

"Tom Pizza Tuesday\n" 

"Jerry IceCream Wednesday\n" 

"Jennifer Coffee Thursday\n" 

現在我要拆分此字符串,所以我可以從這個字符串個體數據,並將每個數據例如數組。

名稱數組的每個元素都存儲上面看到的名稱,如名稱[0] = john,names [1] = Tom等 食物數組的每個元素存儲上面看到的食物,如食物[0] =芯片,食物[1] =披薩。

我試圖這樣做

John + "\t" + Chips + "-" + Monday + "\n" 

    Tom + "\t" + Pizza + "-" + Tuesday+ "\n" 

    Jerry + "\t" + IceCream + "-" + Wednesday+ "\n" 

    Jennifer + "\t" + Coffee + "-" + Thursday+ "\n" 


    String nameCol[] = data.split("\\t"); 

    String foodCol[] = data.split("-"); 

我得到的輸出幾乎是有,但錯了,因爲它包含了我不想陣列例如輸出第一陣列

nameCol[0] = John 

nameCol[1] = Chips - 

nameCol[2] = Monday 
數據

元素0包含約翰,但其他元素包含我不想要的部分。

我試了限制,但並沒有工作

String nameCol[] = data.split("\\t",1); 

String foodCol[] = data.split("-",1); 
+0

你能說多一點被存儲的數據如何/讀?對我而言,你似乎從文件中讀取這些數據。 – Slimu

+0

正確讀取每一行,並確保各自的話都存儲在各自的數組(名稱陣列或食物陣列) –

+1

你知道多少行的文件? – Slimu

回答

0

你應該:

  1. 使用List S表示每列,(列表可以動態地增加其尺寸,而陣列具有固定的大小)
  2. 迭代過的每一行,
  3. 分裂它在空白處(或您正在使用的任何分隔符)
  4. 並將column[0]添加到名稱列表,column[1]到其他列的食物列表等。

或者如果您知道每行只有三個單詞,您可以簡單地使用Scanner並迭代單詞而不是分割行。

while(scanner.hasNext()){ 
    listOfNames.add(scanner.next()); 
    listOfFood.add(scanner.next()); 
    listOfDays.add(scanner.next()); 
} 
1

這將工作:

String yourLine = "John Chips Monday\n"; // Read your line in here 
    String[] resultCol = yourLine.split(" "); 
    resultCol[2] = resultCol[2].split("\\n")[0]; 
    System.out.println(resultCol[2]); 

在字符串中的第一次分裂會給你 「約翰」, 「芯片」 和 「週一\ n」。第二次拆分將數組中的「Monday \ n」分開。將「星期一」返回到數組resultCol[2]的最終索引。從這裏您可以簡單地將數組中的每個元素分配給您需要的數組。

0

從你的數據,我假設你是從文件中讀取這個值。如果你知道有多少行有,你可以使用3列,分別用於所有類型的數據需要被retrived。如果你不知道大小,你可以使用3個ArrayLists。你的問題是,使得拆分後,你沒有把他們在正確的陣列。以下代碼假定您已經擁有一個字符串中的所有數據。

final String values[] = data.split("\\n"); 
    final ArrayList<String> names = new ArrayList<String>(); 
    final ArrayList<String> foods = new ArrayList<String>(); 
    final ArrayList<String> days = new ArrayList<String>(); 
    for (String line : values) { 
     String[] split = line.trim().split("[ ]+"); 
     names.add(split[0]); 
     foods.add(split[1]); 
     days.add(split[2]); 
    } 

你必須考慮的另一件事是檢查數據總是在「行」上有3個值,否則需要進一步的錯誤檢查。

0

試試這個,

 String str="John" + "\t" + "Chips" + "\t" + "Monday" + "-" + "Test"+"\n"+"chet"; 

    String st1= str.replaceAll("(\\t)|(-)|(\n)"," "); 

    String []st=st1.split(" "); 

     for(String s : st) 
     System.out.println(s); 
0

如果你的字符串時,始終將是 「[名] [食品] [日]」,那麼你可以做:

String[] names = new String[allData.length]; //A list of names 
String[] food = new String[allData.length]; //A list of food 
String[] day = new String[allData.length]; //A list of days 

for(int i = 0 ; i < allData.length ; i++) 
{ 
    String[] contents = allData[i].split(" "); //Or use a similar delimiter. 
    names[i] = contents[0]; 
    food[i] = contents[1]; 
    day[i] = contents[2]; 
} 
0

試試這個代碼

String s = "John Chips Monday \n Tom Pizza Tuesday \n Jerry IceCream Wednesday \n Jennifer Coffee Thursday \n"; 
    String split[] = s.split("\n"); 
    String names[] = new String[split.length]; 
    String foods[] = new String[split.length]; 
    String days[] = new String[split.length]; 
    for (int i = 0; i < split.length; i++) { 
     String split1[] = split[i].trim().split(" "); 
     names[i]=split1[0]; 
     foods[i]=split1[1]; 
     days[i]=split1[2]; 
     System.out.println("name=" + names[i] + ",food=" + foods[i] + ",day=" + days[i]); 
    }