Java 从文本文件读取并存储在对象中

Java 从文本文件读取并存储在对象中,java,Java,这是文本文件,我想读取文本文件并将名称、年龄和地址存储到对象中。我的程序有问题,对不起,我是java新手 姓名:姓名1 年龄:20 地址:kokrajhar 我预计结果如下: StudenInfo[name=name1,age=20,address=kokrajhar] StudentInfo.java public class StudenInfo{ private static String name; private static Integer age; p

这是文本文件,我想读取文本文件并将名称、年龄和地址存储到对象中。我的程序有问题,对不起,我是java新手

姓名:姓名1 年龄:20 地址:kokrajhar

我预计结果如下: StudenInfo[name=name1,age=20,address=kokrajhar]

StudentInfo.java

public class StudenInfo{

    private static String name;

    private static Integer age;

    private static String address;


    public String getName() {
        return name;
    }

    public static void setName(String name) {
        StudenInfo.name = name;
    }

    public static Integer getAge() {
        return age;
    }

    public static void setAge(Integer age) {
        StudenInfo.age = age;
    }

    public static String getAddress() {
        return address;
    }

    public static void setAddress(String address) {
        StudenInfo.address = address;
    }

    @Override
    public String toString() {
        return "StudenInfo [name=" + name + ", age=" +age +", address=" + address +"]";
    }


    }
class test {  

    public static void main(String[] args) throws Exception{
    File f1 = new File("names.txt");
    Scanner scanner = new Scanner(f1);
    String nextLine= scanner.nextLine();
    String[] stuinfo= nextLine.split(":");
    scanner.close();


    String strname=stuinfo[0];
    String strage= stuinfo[1];
    String straddress= stuinfo[2];


    StudenInfo students=new StudenInfo();
    students.setName(strname);
    int intage = Integer.parseInt(strage);
    students.setAge(intage);

    students.setAddress(straddress);
    System.out.println(students.toString());

}
Test.java

public class StudenInfo{

    private static String name;

    private static Integer age;

    private static String address;


    public String getName() {
        return name;
    }

    public static void setName(String name) {
        StudenInfo.name = name;
    }

    public static Integer getAge() {
        return age;
    }

    public static void setAge(Integer age) {
        StudenInfo.age = age;
    }

    public static String getAddress() {
        return address;
    }

    public static void setAddress(String address) {
        StudenInfo.address = address;
    }

    @Override
    public String toString() {
        return "StudenInfo [name=" + name + ", age=" +age +", address=" + address +"]";
    }


    }
class test {  

    public static void main(String[] args) throws Exception{
    File f1 = new File("names.txt");
    Scanner scanner = new Scanner(f1);
    String nextLine= scanner.nextLine();
    String[] stuinfo= nextLine.split(":");
    scanner.close();


    String strname=stuinfo[0];
    String strage= stuinfo[1];
    String straddress= stuinfo[2];


    StudenInfo students=new StudenInfo();
    students.setName(strname);
    int intage = Integer.parseInt(strage);
    students.setAge(intage);

    students.setAddress(straddress);
    System.out.println(students.toString());

}

首先,正如前面的回答所说,不应该使用静态变量,因为它会修改所有对象的值,最终会得到相同的值

第二,如果您总是可以指望信息以这种方式格式化,那么您应该使用正则表达式,因为您当前所做的拆分只会导致更多的bug

下面是一个如何使用它的示例:

     Pattern pattern = Pattern.compile("\\w*\\s:\\s\\w*"); // this will split on groups of information, like name : name1
        List<String> studentInfo = new ArrayList();
        Matcher matcher = pattern.matcher(test);
        while (matcher.find()) {
            studentInfo.add(matcher.group());
        }


studentInfo.get(0).substring(studentInfo.get(0).trim().lastIndexOf(" ")); // this is the name
        studentInfo.get(1).substring(studentInfo.get(1).trim().lastIndexOf(" ")); // this is the age
        studentInfo.get(2).substring(studentInfo.get(2).trim().lastIndexOf(" ")); // this is the address
Pattern=Pattern.compile(“\\w*\\s:\\s\\w*”);//这将根据信息组进行拆分,如name:name1
List studentInfo=new ArrayList();
匹配器匹配器=模式匹配器(测试);
while(matcher.find()){
添加(matcher.group());
}
studentInfo.get(0).substring(studentInfo.get(0).trim().lastIndexOf(“”);//这就是名字
studentInfo.get(1).子字符串(studentInfo.get(1).trim().lastIndexOf(“”);//这就是时代
studentInfo.get(2).子字符串(studentInfo.get(2).trim().lastIndexOf(“”);//这是地址

寻求调试帮助的问题(“为什么此代码不起作用?”)必须包括所需的行为、特定的问题或错误以及在问题本身中重现这些问题所需的最短代码。没有明确问题陈述的问题对其他读者没有用处。请看:什么不起作用?嘿,欢迎来到Stackoverflow,请阅读上面的建议链接,然后自由编辑您的问题,谢谢。。实际输出是什么,什么不起作用,如果你得到一些,错误是什么,等等:)