我有一个文本文件“test.txt”,我在其中存储学生的详细信息,如身份证号码和课程。我希望在“LASTSTUDENTEENTRYLINE”一行前面加上新学生。我遇到的问题是,我在一个名为“objectInputFieldsList”的数组列表中收集学生的详细信息。我一直试图将“LASTSTUDENTEENTRYLINE”替换为“objectInputFieldsList”+“LASTSTUDENTEENTRYLINE”。问题是两者不能混合,一个是数组列表,另一个是字符串。数组列表包含来自用户的文本字段值的输入。我如何成功地将LASTSTUDENTEENTRYLINE替换为“objectInputFieldsList”+“LASTSTUDENTEENTRYLINE”?提前谢谢大家。
到目前为止,我一直在尝试这样做:
更新前的文本文件示例:
123 | Oliver | Muchai
456 | Revilo | Chamu
LASTSTUDENTEENTRYLINENNAMES
Classes | 123 | English
Classes | 456 | Bilogy
LASTSTUDENTEENTRYLINENSUBJECTS在使用新用户进行更新之后,文本文件应该如下所示:
123 | Oliver | Muchai
456 | Revilo | Chamu
678 | Eddys | Rockery
LASTSTUDENTEENTRYLINENNAMES
Classes | 123 | English
Classes | 456 | Biology
Classes | 678 | Kiswahili
LASTSTUDENTEENTRYLINENSUBJECTS“守则”:
// The ArrayList called from the class that gets the user input from the JTextFields
AddNewClientSaveAction save = new AddNewClientSaveAction();
StringBuffer sb = new StringBuffer();
String lastNames = "LASTSTUDENTEENTRYLINENNAMES ";
String lastSubject = "LASTSTUDENTEENTRYLINENSUBJECTS";
String textToEdit1 = lastNames;
int cnt1 = sb.indexOf(textToEdit1);
String replacementString1 = "\n" + save + "\n" + lastNames;
sb.replace(cnt1,cnt1+textToEdit1.length(), replacementString1);发布于 2013-08-12 08:06:25
这不是一个完整或完整的解决方案,而是一个概念的示例
这假设您正在阅读that中的所有文本,如果没有,with...life将更加困难。
这基本上使用StringBuilder#indexOf来查找索引点,其中存在特定的String文本。在这个例子中,我们只是在寻找LASTSTUDENTEENTRYLINENNAMES,但是应该有这样的想法.
从那里开始,对于每个新的记录行,我们创建一个临时的String来插入,然后在前面获得的索引点之前插入.
现在。在课程中加入也不是件难事.
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
public class FileUpdate {
public static final String LAST_STUDENT_LINE = "LASTSTUDENTEENTRYLINENNAMES";
public static void main(String[] args) {
StringBuilder sb = new StringBuilder(128);
List<Student> objectInputFieldsList = new ArrayList<>(25);
objectInputFieldsList.add(new Student(128, "Banana", "Pajamas"));
BufferedReader br = null;
try {
br = new BufferedReader(new FileReader("test.txt"));
String text = null;
while ((text = br.readLine()) != null) {
if (sb.length() > 0) {
sb.append("\n");
}
sb.append(text);
}
System.out.println("Before");
System.out.println(sb);
for (Student s : objectInputFieldsList) {
int insertIndex = sb.indexOf(LAST_STUDENT_LINE);
StringBuilder line = new StringBuilder(128);
line.append(s.getId()).append(" | ").append(s.getFirstName()).append(" | ").append(s.getLastName()).append("\n");
sb.insert(insertIndex, line.toString());
// Find subject mark and add the students subjects in as well...
}
System.out.println("\nAfter");
System.out.println(sb);
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
br.close();
} catch (IOException exp) {
}
}
}
public static class Student {
private int id;
private String firstName;
private String lastName;
public Student(int id, String firstName, String lastName) {
this.id = id;
this.firstName = firstName;
this.lastName = lastName;
}
public int getId() {
return id;
}
public String getFirstName() {
return firstName;
}
public String getLastName() {
return lastName;
}
}
}这个输出..。
Before
123 | Oliver | Muchai
456 | Revilo | Chamu
LASTSTUDENTEENTRYLINENNAMES
Classes | 123 | English
Classes | 456 | Bilogy
LASTSTUDENTEENTRYLINENSUBJECTS
After
123 | Oliver | Muchai
456 | Revilo | Chamu
128 | Banana | Pajamas
LASTSTUDENTEENTRYLINENNAMES
Classes | 123 | English
Classes | 456 | Bilogy
LASTSTUDENTEENTRYLINENSUBJECTSNow...Having做了所有这些..。
我建议使用单一用户数据库,例如H2,甚至XML,在长期错误的情况下,这种数据库必须要简单得多,也要少得多。
发布于 2013-08-12 07:48:29
因为它是一个Java ArrayList,所以可以使用ArrayList#add(int index, E element)方法在列表中指定的位置插入元素。
将包含行尾“index”的元素前面的索引用作lastName。
如果要在ArrayList中添加字符串,则使用此解决方案。
发布于 2013-08-12 08:15:12
如果我对你的理解是正确的,你想把新学生写进你的"test.txt“之前的"LATSTUDENTTEENTRYLINE”。
首先,将整个txt放到一个StringBuffer中,因为它比您能够在一个特殊索引上编写的能力还要好。
使用
sb.getIndexOf("LASTSTUDENTEENTRYLINE");并获取要添加的字符串的大小。
String line = "Student | foo | bar";
int index = line.length();现在你得把这行写在
sb.getIndexOf("LASTSTUDENTTEENTRYLINE") - index;在你的StringBuffer里。最后,将整个StringBuffer写入txt。也许你得在你的队伍里
+ "\n"创建一个新行,以便在txt中看起来更好。
https://stackoverflow.com/questions/18181685
复制相似问题