Java String Split从大字符串中获取单个数据

时间:2014-03-25 12:21:33

标签: java regex arrays string

我有以下数据存储为大字符串。

"John Chips Monday \n"

"Tom Pizza Tuesday\n"

"Jerry IceCream Wednesday\n"

"Jennifer Coffee Thursday\n"

现在我想分割这个字符串,这样我就可以从这个字符串中获取单个数据,并将每个数据放在一个数组中。

names数组的每个元素都存储上面看到的名称,如names [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包含john,但其他元素包含我不想要的部分。

我尝试了限制,但这不起作用

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

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

7 个答案:

答案 0 :(得分:1)

请勿单独使用它们,同时使用分隔符,例如:String dataArr\[\] = data.split("\t\n",1);
然后遍历String[]

for (int i = 0; i < dataArr.length; i+=2) {
    String name = dataArr[i];
    String food = dataArr[i+1];
    // ... do whatever you want with them.
}

或者,您也可以尝试类似的Pattern - Matcher方法

答案 1 :(得分: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] );

字符串上的第一个分割将为您提供&#34; John&#34;,&#34; Chips&#34;和&#34;星期一\ n&#34;。第二次拆分需要&#34;星期一\ n&#34;从数组中分裂出来。返回&#34;星期一&#34;回到数组resultCol[2]的最终索引。从这里,您可以简单地将数组中的每个元素分配给您需要的数组。

答案 2 :(得分:0)

你应该:

  1. 为每列使用List,(列表可以动态增加其大小,而数组具有固定大小)
  2. 遍历每一行,
  3. 将其拆分为空格(或您正在使用的任何分隔符)
  4. 并将column[0]添加到名称列表中,column[1]添加到食物列表中,依此类推添加其他列。
  5. 或者如果您知道每行只有三个单词,您可以简单地使用扫描程序并迭代单词而不是分割行。

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

答案 3 :(得分:0)

根据您的数据,我假设您正在从文件中读取此值。如果您知道有多少行,则可以使用3个数组,每个数组用于需要重试的每种类型的数据。如果您不知道大小,可以使用3个ArrayLists。您的问题是,在进行拆分后,您没有将它们放入正确的数组中。以下代码假定您已将所有数据都包含在一个String中。

 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个值,否则需要进一步的错误检查。

答案 4 :(得分: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);

答案 5 :(得分:0)

如果你的字符串总是“[name] [food] [day]”,那么你可以这样做:

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];
}

答案 6 :(得分: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]);
    }