我有一个这样的文本文件;
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);
}
}
}
但这并没有得到身份证明。我不确定如何解决这个问题,如果你帮助我,我将不胜感激。
答案 0 :(得分:2)
您的代码中有两个while循环。通常,一个while循环将遍历每个项目,直到条件不再为真。我认为你需要重新设计这个以获得更好的“控制流”,这可能意味着只使用一个while循环(使用部分来获取数字,然后是名称。
我想你正在寻找第二个while循环的结果,但是当你到达它时,第一个while循环将耗尽所有数据。
最后,打印数组将打印出数组引用标识符。如果要实际打印数组的内容,则需要在数组中的元素上进行循环,并且需要显式打印出每个数组元素。
作为上述阵列打印技术(您应该掌握)的替代方法,您还可以使用Arrays.toString(<insert array here>)
方法调用。但是,在许多情况下,它会为您提供不需要的格式。这就是你需要了解上述技术的原因。
此外,您还有一个隐藏的问题。你(在第二个while循环中)假设只有九个输入。密切关注你在写什么。每次你必须找到一个数字,考虑它是否是一个“魔术”数字。幻数是代码中的数字,没有任何解释或原因。它们是代码中的错误指标,这些错误可能不会经过时间的考验。
例如,您使用的是数字9
,因为您已看到输入文件。下一个输入文件中可能没有九个条目,如果您为其输入了八个条目,或者一个输入有十个条目,您的程序可能无法正常工作。也许你应该通过在仍有(某些)输入时进行逻辑处理来重写循环来删除幻数。
答案 1 :(得分:0)
尝试使用尺寸
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]);
}
}
}
这应该通过并检索数字(.substring(0,1)
)然后检索名称(.substring(2)
),然后将数字转换为int值。
答案 2 :(得分:0)
尝试以下方法:
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]);
}
答案 3 :(得分:0)
其实我的朋友,这里有几个错误。
1)当第一个while循环完成时,它将fromfile.hasNext()
保留为false
因此第二个循环永远不会启动。
&gt;&gt; 要解决此问题,您需要将其全部放在一个循环中。
2)fileID
是一个数组。您无法使用System.out.println(fileID)
打印它。
&gt;&gt; 您必须告诉您想要什么样的输出。代码将取决于此。要简单地打印所有值,您需要创建 for 循环,以分别打印每个值。您应该使用fileID.length
作为号码。你需要循环它的次数。
3)基本上,fromfile.next()
不是这样做的。
&gt;&gt; 您需要使用fromfile.nextLine()
。