将字符串转换为多个数组?

时间:2013-05-21 21:36:36

标签: java arrays string file bufferedreader

我是一名正在学习java的学生(今年刚刚开始。我刚刚毕业,所以我也不能向高中老师寻求帮助),我需要一些关于如何将字符串变成多个的帮助阵列(?)。

然而,在此之后我陷入困境(因为我无法找到一种方法来为我的目的分解字符串)。

文件读起来像这样

  

输入:第一行是案例数。对于每个案例   第一行将是苏珊的工作时间表,第二行将是   约根的工作时间表。工作时间表将是日期   他们工作的月份(1-30)。第三行将是大小   最初的电视。

有问题的文件:

3

2 5 10

2 4 10

60

2 4 10

2 5 10

60

1 2 3 4 7 8 10 12 14 16 18 20 24 26 28 30

1 2 3 6 9 10 17 19 20 21 22 23 25 27 28 29

20

我不知道该如何解决这个问题。我试过.split(),但这似乎只适用于字符串的第一行。我们将非常感谢您提供的任何帮助/提示!

4 个答案:

答案 0 :(得分:1)

根据您阅读文件的方式,您可能会使用以下内容:

BufferedReader in = new BufferedReader(new FileReader("foo.in"));

然后,逐行读取文件:

String theLine = in.readLine();

现在你有了与该行相对应的字符串(在这种情况下是第一行,但你可以一遍又一遍地调用readLine()来读取它们),但是请注意你不读'整个'立刻提交所有字符串,正如我认为你建议的那样,而不是读者一次排队

因此,如果你想要一个数组中保存的所有行,你需要做的只是声明数组,然后读入每一行。类似的东西:

// Declare an array to put the lines into
int numberOfLines = 10;
String[] arrayOfStrings = new String[numberOfLines];

// Read the first line
String aLine = in.readLine();

int i = 0;

// If the line that has been read is null, it's reached the end of the file
// so stop reading
while(aLine != null){
    arrayOfStrings[i] = aLine;
    i++;
    aLine = in.readLine();
}

// arrayOfStrings elements are now each line as a single String!

当然,您可能不知道在第一种情况下要读取的文件中有多少行,因此很难声明数组的大小。然后,您可以查看动态扩展的数据结构,例如ArrayList,但这是一个单独的问题。

答案 1 :(得分:1)

您可以按行读取输入,然后对它们应用正则表达式,以便将数字与字符串分开,如:

String numbers = "1 2 3 4 7 8 10 12 14 16 18 20 24 26 28 30";
String[] singleNumbers = numbers.split(" ");

然后您将在singleNumbers数组中用空格分隔这些数字

答案 2 :(得分:0)

鉴于您已经拥有BufferedReader,您可以尝试这样的方法来为您提供行和列的多维数组:

  BufferedReader reader = ...;
  List<String[]> lines = new ArrayList<String[]>();
  String input;
  while((input = reader.readLine()) != null){
    if (!input.trim().isEmpty()){
      lines.add(input.split(" "));
    }
  }

  String[][] data = lines.toArray(new String[lines.size()][]);

答案 3 :(得分:0)

嘿,我为你找到了一个很棒的解决方案。

只需创建一个课程来存储每个学生的数据,如

  import java.util.List;

  public class Student {

private int noOfCases;
private List<String> workSchedule;
private List<String> initialTV;

//getter setters
}

然后这......

public static void main(String[] args) {

    //3 students for reading 9 lines
    //Susan,  Jurgen and You ;)
    Student[] students = new Student[3];

    int linesRead = 0;

    String aLine = null;

    // read each line through aLine
    for (Student student : students) {

        //use buffered/scanner classes for reading input(each line) in aLine
        while (aLine != null) {
            ++linesRead;
            if (linesRead == 1) {
                student.setNoOfCases(Integer.valueOf(aLine));
                ++linesRead;
            } else if (linesRead == 2) {
                student.setWorkSchedule(Arrays.asList(aLine.split(" ")));
                ++linesRead;
            } else if (linesRead == 3) {
                student.setInitialTV(Arrays.asList(aLine.split(" ")));
            } else {
                linesRead = 0;
            }
        }
    }
}
}

如果您需要阅读更多行/更多学生的记录,只需调整学生数组的大小!!