我是一名正在学习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()
,但这似乎只适用于字符串的第一行。我们将非常感谢您提供的任何帮助/提示!
答案 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;
}
}
}
}
}
如果您需要阅读更多行/更多学生的记录,只需调整学生数组的大小!!