如何用用户输入的ArrayList替换文本文件中的字符串



我有一个文本文件"test.txt",其中存储学生的详细信息,如身份证号码和所学课程。我希望在"LASTSTUDENTEENTRYLINE"之前立即添加新学生。我遇到的问题是,我正在一个名为"objectInputFieldsList"的数组列表中收集学生的详细信息。我一直在尝试用"objectInputFieldsList"+"LASTSTUDENTEENTRYLINE"替换"LASTStuDENTENTRYLINE"。问题是这两者不能混合——一个是数组列表,另一个是字符串。数组列表包含来自用户的文本字段值的输入。如何成功地解决此问题,并将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);

这不是一个完整或完整的解决方案,而是一个概念的例子

这假设您从开始阅读所有文本。。。如果你不这样做,生活会变得更加困难。

这基本上使用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
LASTSTUDENTEENTRYLINENSUBJECTS

现在。。。做了所有这些。。。

我建议使用单用户数据库,例如H2,甚至XML,这在长期错误的IMHO 中必须更容易,也不那么混乱

由于它是Java ArrayList,因此可以使用ArrayList#add(int index, E element)方法在列表中的指定位置插入元素。

将包含行末尾"lastName"的元素之前的索引用作index

如果您想在ArrayList中添加字符串,请使用此解决方案。

如果我理解得对,你想在"LATSTUDENTTEENTRYLINE"之前将new Student写入你的"test.txt"中。

首先将您的整个txt放入StringBuffer中,因为这样您就可以在一个特殊的索引中进行写入。

使用

sb.getIndexOf("LASTSTUDENTEENTRYLINE");

并获取要添加的字符串的大小

String line = "Student | foo | bar";
int index = line.length();

现在你必须在上写这行

sb.getIndexOf("LASTSTUDENTTEENTRYLINE") - index;

在StringBuffer中。最后,将整个StringBuffer写入到txt中。也许你必须把放在你的线路上

+ "n"

制作一条新行,使其在txt 中看起来更好

最新更新