Java 从文本文件获取对象

Java 从文本文件获取对象,java,Java,我有一个这样的文本文件 7-Georgia 1-Andrew 6-John 8-Luke 9-Erica 3-Kim 2-Jude 5-Phil 4-Leo 第一列是id,第二列是name。我怎样才能得到这些身份证和名字?到目前为止,我写了这个 import java.io.File; import java.io.FileNotFoundException; import java.util.*; public clas

我有一个这样的文本文件

    7-Georgia
    1-Andrew
    6-John
    8-Luke
    9-Erica
    3-Kim
    2-Jude
    5-Phil
    4-Leo
第一列是id,第二列是name。我怎样才能得到这些身份证和名字?到目前为止,我写了这个

import java.io.File;
import java.io.FileNotFoundException;
import java.util.*;
public class Main {

    @SuppressWarnings("resource")
    public static void main(String[] args) throws FileNotFoundException {
        // TODO Auto-generated method stub
        @SuppressWarnings("unused")

        Scanner fromFile = new Scanner(new File("id_name.txt"));
        fromFile.useDelimiter("-");

        while(fromFile.hasNext()){
            String temp = fromFile.next();
            System.out.println(temp);
        }

        while(fromFile.hasNext()){
            String temp= fromFile.next();
            int[] fileID;
            fileID= new int[9];

            for(int i=0; i<9; i++){
                fileID[i]= Integer.parseInt(temp);
            }

            System.out.println(fileID);
        }
    }
}
导入java.io.File;
导入java.io.FileNotFoundException;
导入java.util.*;
公共班机{
@抑制警告(“资源”)
公共静态void main(字符串[]args)引发FileNotFoundException{
//TODO自动生成的方法存根
@抑制警告(“未使用”)
Scanner fromFile=new Scanner(新文件(“id_name.txt”);
fromFile.useDelimiter(“-”);
while(fromFile.hasNext()){
字符串temp=fromFile.next();
系统输出打印项次(温度);
}
while(fromFile.hasNext()){
字符串temp=fromFile.next();
int[]文件ID;
fileID=newint[9];

对于(int i=0;i您的代码中有两个while循环。通常,一个while循环将遍历每一项,直到条件不再为真。我认为您需要对此进行修改,以获得更好的“控制流”,这可能意味着只使用一个while循环(使用部分获取数字,然后获取名称)

我猜想您正在寻找第二个while循环的结果,但是当您到达它时,第一个while循环将耗尽您的所有数据

最后,打印数组将打印出数组引用标识符。如果要实际打印数组的内容,需要在数组中的元素上进行循环,并且需要显式打印出每个数组元素

作为上述数组打印技术(您应该掌握)的替代方法,您还可以使用
Arrays.toString()
方法调用。但是,在许多情况下,它会为您提供不需要的格式。这就是为什么您也需要了解上述技术的原因

你也有一个隐藏的问题。你(在第二个循环中)假设只有九个输入。要密切注意你正在写的东西。每次你要达到一个数字,都要考虑它是否是一个“魔法”。数字。幻数是代码中的数字,没有解释或解释它们存在的原因。它们是代码中错误的指示器,这些错误是由可能无法经受时间考验的假设造成的

例如,您正在使用数字
9
,因为您看到了输入文件。下一个输入文件中可能没有九个条目,如果您给它八个条目的输入,或者给它十个条目的输入,您的程序可能无法正常工作。也许您应该重写循环以删除神奇的数字,方法是mak当仍有(一些)输入时,正在重新启动逻辑进程。

请尝试此选项以确定大小

import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        try {
            Scanner fromFile = new Scanner(new File("id_name.txt"));
        } catch (FileNotFoundException e) {
            System.err.println("File not found");
        }

        String[] arr = new String[9];
        String[] oth = new String[9];
        int i = 0;

        while(fromFile.hasNextLine()) {
            String temp = fromFile.nextLine();
            oth[i] = temp.substring(0,1);
            arr[i] = temp.substring(2);
            i++;
        }

        int[] fileID;
        fileID = new int[9];

        for(int j = 0; j < 9; j++) {
            fileID[j] = Integer.parseInt(oth[j]);
        }
    }
}
导入java.io.File;
导入java.io.FileNotFoundException;
导入java.util.Scanner;
公共班机{
公共静态void main(字符串[]args){
试一试{
Scanner fromFile=new Scanner(新文件(“id_name.txt”);
}catch(filenotfounde异常){
System.err.println(“未找到文件”);
}
字符串[]arr=新字符串[9];
字符串[]oth=新字符串[9];
int i=0;
while(fromFile.hasNextLine()){
字符串temp=fromFile.nextLine();
oth[i]=温度子串(0,1);
arr[i]=温度子串(2);
i++;
}
int[]文件ID;
fileID=newint[9];
对于(int j=0;j<9;j++){
fileID[j]=Integer.parseInt(oth[j]);
}
}
}
这应该检查并检索数字(
.substring(0,1)
),然后检索名称(
.substring(2)
),然后将数字转换为int值。

尝试以下操作:

File file=new File("id_name.txt");
int[] fileID;
fileID= new int[9];
String[] result = file.nextLine().split("-");

for (int x = 0; x < result.length; x++){
if (Character.isDigit(result[x])) { // use the isDigit method to get the ids
System.out.println("this is an id");
fileID[i]= Integer.parseInt(result[x]);
}
File File=new文件(“id_name.txt”);
int[]文件ID;
fileID=newint[9];
String[]result=file.nextLine().split(“-”);
对于(int x=0;x
事实上,我的朋友,这里有几个错误

1)当第一个while循环完成时,它将
fromfile.hasNext()
保留为
false
,因此第二个循环永远不会开始。

>要解决此问题,您需要将其全部放在一个while循环中

2)
fileID
是一个数组。不能使用
System.out.println(fileID)
打印它

>您必须告诉您想要哪种输出。代码将取决于此。为了简单地打印所有值,您需要为
创建一个单独打印每个值的循环。对于需要循环的次数,您应该使用
fileID.length

3)基本上,
fromfile.next()
不是这样做的方法。


>您需要使用
fromfile.nextLine()

文本文件中有9个孩子?你能按原样发布输出吗?不要抑制警告,警告是你的朋友,因为它们会告诉你隐藏可能错误的原因。此外,在关键字(如
for
if
)和条件(如
for(
if))之间留出一个空格(
这表明它不是函数调用。这些小东西会在你还不了解的方面帮助你,但让你的代码可读是一项非常重要的学习技能。
System.out.println(fileID)
这只会输出数组的一些神秘objectID…就“不抑制警告”准则而言,我忘了提到您应该更改代码以删除警告。这样,可能的错误隐藏的位置就更少了。我将第二个while部分移动到了第一个while部分,但仍然无法获得正确的结果我还想补充一点,OP不应该硬编码输入元素的数量,因为他实际上不知道。程序运行正常