首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何将文本文件中的文本字符串替换为用户输入的ArrayList

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

Stack Overflow用户
提问于 2013-08-12 07:37:03
回答 3查看 408关注 0票数 1

我有一个文本文件“test.txt”,我在其中存储学生的详细信息,如身份证号码和课程。我希望在“LASTSTUDENTEENTRYLINE”一行前面加上新学生。我遇到的问题是,我在一个名为“objectInputFieldsList”的数组列表中收集学生的详细信息。我一直试图将“LASTSTUDENTEENTRYLINE”替换为“objectInputFieldsList”+“LASTSTUDENTEENTRYLINE”。问题是两者不能混合,一个是数组列表,另一个是字符串。数组列表包含来自用户的文本字段值的输入。我如何成功地将LASTSTUDENTEENTRYLINE替换为“objectInputFieldsList”+“LASTSTUDENTEENTRYLINE”?提前谢谢大家。

到目前为止,我一直在尝试这样做:

更新前的文本文件示例:

代码语言:javascript
复制
123 | Oliver | Muchai
456 | Revilo | Chamu
LASTSTUDENTEENTRYLINENNAMES

Classes | 123 | English
Classes | 456 | Bilogy
LASTSTUDENTEENTRYLINENSUBJECTS

在使用新用户进行更新之后,文本文件应该如下所示:

代码语言:javascript
复制
123 | Oliver | Muchai
456 | Revilo | Chamu
678 | Eddys | Rockery
LASTSTUDENTEENTRYLINENNAMES

Classes | 123 | English
Classes | 456 | Biology
Classes | 678 | Kiswahili
LASTSTUDENTEENTRYLINENSUBJECTS

“守则”:

代码语言:javascript
复制
        // 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);
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-08-12 08:06:25

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

这假设您正在阅读that中的所有文本,如果没有,with...life将更加困难。

这基本上使用StringBuilder#indexOf来查找索引点,其中存在特定的String文本。在这个例子中,我们只是在寻找LASTSTUDENTEENTRYLINENNAMES,但是应该有这样的想法.

从那里开始,对于每个新的记录行,我们创建一个临时的String来插入,然后在前面获得的索引点之前插入.

现在。在课程中加入也不是件难事.

代码语言:javascript
复制
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;
        }            
    }
}

这个输出..。

代码语言:javascript
复制
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

Now...Having做了所有这些..。

我建议使用单一用户数据库,例如H2,甚至XML,在长期错误的情况下,这种数据库必须要简单得多,也要少得多。

票数 1
EN

Stack Overflow用户

发布于 2013-08-12 07:48:29

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

将包含行尾“index”的元素前面的索引用作lastName。

如果要在ArrayList中添加字符串,则使用此解决方案。

票数 1
EN

Stack Overflow用户

发布于 2013-08-12 08:15:12

如果我对你的理解是正确的,你想把新学生写进你的"test.txt“之前的"LATSTUDENTTEENTRYLINE”。

首先,将整个txt放到一个StringBuffer中,因为它比您能够在一个特殊索引上编写的能力还要好。

使用

代码语言:javascript
复制
sb.getIndexOf("LASTSTUDENTEENTRYLINE");

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

代码语言:javascript
复制
String line = "Student | foo | bar";
int index = line.length();

现在你得把这行写在

代码语言:javascript
复制
sb.getIndexOf("LASTSTUDENTTEENTRYLINE") - index;

在你的StringBuffer里。最后,将整个StringBuffer写入txt。也许你得在你的队伍里

代码语言:javascript
复制
+ "\n"

创建一个新行,以便在txt中看起来更好。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18181685

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档