2014-03-25 53 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]); 
    }