2013-08-12 50 views
1

我有一个文本文件“test.txt”,用于存储学生的详细信息,例如I.D号和所采取的课程。 我希望在“LASTSTUDENTEENTRYLINE”之前立即添加新学生。 我遇到的问题是我正在收集名为“objectInputFieldsList”的数组列表中的学生详细信息。我一直试图用“objectInputFieldsList”+“LASTSTUDENTEENTRYLINE”替换“LASTSTUDENTEENTRYLINE”。 问题是两个不混合 - 一个是数组列表,另一个是字符串。数组列表包含来自用户的文本字段值的输入。 如何成功解决此问题并用“objectInputFieldsList”+“LASTSTUDENTEENTRYLINE”替换LASTSTUDENTEENTRYLINE? 非常感谢大家提前。如何使用用户输入的ArrayList替换文本文本的字符串

这里是我到目前为止一直在想:更新之前

示例文本文件:

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); 
+0

什么'sb'在你的代码更好?你可以发布'sb.replace(....)'方法! – Azad

+0

@Azad我的猜测是'StringBuilder' .... – MadProgrammer

+0

对不起:StringBuffer sb = new StringBuffer(); –

回答

1

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

这是假设你正在阅读的所有文字从下手......生活将显着更多的困难,如果你”不是。

这基本上使用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,它必须是显著更容易,很多长错少凌乱 - 恕我直言

+0

非常感谢答案,但我认为你得到了关于示例文本文件错误的部分。这两部分显示了相同文本文件的前后部分。 –

+0

还有一行'128 |香蕉|睡衣“,它以2行结束,3行学生开始。我只是懒得添加类,不能为你做所有事情;) – MadProgrammer

1

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

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

这种解决方案如果你想在ArrayList里面添加字符串。

+0

什么是AddNewClientSaveAction? – azzurroverde

+0

这是一个类,它从JTextFields收集用户输入,并将它们放入一个ArrayList中,通过上面的代码存储在文本文件中(我已经排除了上面代码存在的类的其他部分) –

0

如果我理解你的权利,您希望在“LATSTUDENTTEENTRYLINE”之前将新学生写入您的“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

相关问题