gpt4 book ai didi

Java-StringTokenizer

转载 作者:行者123 更新时间:2023-12-02 02:55:39 25 4
gpt4 key购买 nike

免责声明:我昨天才学会如何做到这一点,我很绝望

我有 3 个类(class)(StudentClassScheduleClassEnrolment)

public class ClassEnrolment {
ClassSchedule cs;
Student stud;

public ClassEnrolment(ClassSchedule cs, Student stud) {
super();
this.cs = cs;
this.stud = stud;
}
}

-----

public class Student{
private String name;
private String matricNo;
ClassEnrolment classroom;
ClassSchedule schedule;
}

-----

public class ClassSchedule {
String classType;
int index;
int group;
String day;
String time;
String venue;
String remark;
String courseCode;
}

我正在尝试读取/写入文本文件(数据库)。我在 "/////////////////" 内的 3 行中遇到问题。

我知道 ClassEnrolment 中声明的属性不是 int 也不是 string。我该怎么做?如何将 ClassScheduleStudent 作为 StringTokenizer 的一部分?

文本文件存储来自ClassSchedule的索引和来自Student的matricNo。我有一种感觉,我这样做是错误的。

    public static ArrayList readEnrolment(String filename) throws IOException {
ArrayList stringArray = (ArrayList) read(filename);
ArrayList alr = new ArrayList();

for (int i = 0; i < stringArray.size(); i++) {
String st = (String) stringArray.get(i);
StringTokenizer star = new StringTokenizer(st, SEPARATOR);

///////////////////////////////////////////////////
int cs = Integer.parseInt(star.nextToken().trim());
String stud = star.nextToken().trim();
ClassEnrolment enrolment = new ClassEnrolment(cs, stud);
//////////////////////////////////////////////////
alr.add(enrolment);
}
return alr;
}

public static void saveEnrolment(String filename, List al) throws IOException {
List alw = new ArrayList();

for (int i = 0; i < al.size(); i++) {
ClassEnrolment enrolment = (ClassEnrolment) al.get(i);
StringBuilder st = new StringBuilder();
st.append(enrolment.getCs2());
st.append(SEPARATOR);
st.append(enrolment.getStud2());
alw.add(st.toString());
}
write(filename, alw);
}

最佳答案

您的问题是 Serialization 的问题。您完全可以声明您的 classEnrolmentSerializable (不要忘记serialUUID)并让经典的java序列化过程将对象作为字节写入文件中。

但是,您在这里尝试的是为您的类构思一个自定义序列化器。我建议您使用泛型,例如:

public interface Serializer<T> {

byte[] write(T objectToSerialize);

//to build a factory/service around it
boolean canDeserialize(byte[] serializedObject);

T read(byte[] serializedObject);
}

这样你的方法 read/writeEnrollment 将只是创建一个 Serializer<ClassEnrollment>并让它完成它的工作(这可能会创建一个 Serializer<Student> 和一个 Serializer<ClassSchedule> )。

对于序列化过程,我不得不说 StringTokenizer 是 JDK 1 的遗留类,其自身的 javadoc 不鼓励使用它:

StringTokenizer is a legacy class that is retained for compatibility reasons although its use is discouraged in new code. It is recommended that anyone seeking this functionality use the split method of String or the java.util.regex package instead.

如果您想要序列化可能与 ClassEnrollment 不同的类的对象,那么能够区分所使用的类会很好。有很多方法可以做到这一点,正如一位评论者所说,json 序列化效果非常好。

关于Java-StringTokenizer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43139459/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com