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不应该硬编码输入元素的数量,因为他实际上不知道。程序运行正常