如何使用Java读取文本文件,如下所示: 6 - 是元素的总数,它放在第一行 5 1 6 3 2 - 这是数组编号,它位于第二行
我尝试使用扫描程序,使用分隔符,但是我在第一行得到异常,线程“main”中的异常java.util.InputMismatchException
所以6是元素的总数,nextline是元素的数组。我想在这个算法上实现一个能找到缺失数字的算法(在我们的例子中为4)。但我的问题是如何阅读文件,而不是如何实现算法..
这是代码:
List<Integer> temps = new ArrayList<>();
try (Scanner scanner = new Scanner(new BufferedReader(new FileReader("fisier.txt")))) {
scanner.useDelimiter(" ");
while (scanner.hasNextLine()) {
int number = scanner.nextInt();
scanner.nextLine();
int data = scanner.nextInt();
scanner.skip(scanner.delimiter());
temps.add(number);
temps.add(data);
}
Integer[] tempsArray = temps.toArray(new Integer[0]);
for (Integer s : tempsArray) {
System.out.println(s);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
}
答案 0 :(得分:0)
BufferedReader br;
FileInputStream fin;
try {
fin = new FileInputStream(fileName);
br = new BufferedReader(new InputStreamReader(fin));
// Read and Split a line.
String line = br.readLine().trim();
String[] attributes = line.split(" ");
// cast to int and get values
List<Integer> numbers = new ArrayList<>();
for(String attribute : attributes) {
numbers.add(Integer.parseInt(attribute);
}
// Sort it ascending
Collections.sort(numbers);
// algorithm to find missing one
// first+last one can´t be wrong so it´s working
int checkValue = numbers.get(0);
int missing;
for(Int number : numbers) {
if(checkvalue != number) {
missing = checkValue;
break;
}
checkValue++;
}
System.out.println("Missing Number: " + missing):
fin.close();
br.close();
} catch (FileNotFoundException e) {
System.err.println("Your Message");
} catch (IOException e) {
System.err.println("Your Message");
}
答案 1 :(得分:0)
这会将文件逐行读入一个数组列表,以便循环解析该数字。您可以使用Apache commons IO来执行FileUtils.downloadToFile
List<String> data = new ArrayList<>;
BufferedReader br = new BufferedReader (new FileReader(new File("data.txt")));
String line = null;
while ((line = br.readLine()) != null)
data.add(line);
br.close();
答案 2 :(得分:0)
由于某种原因,nextInt()不喜欢文本文件,我已经使用方法scanner.hasNext()
来控制它并使用Integer.valueOf(scanner.next())
来返回一个int值。
while (scanner.hasNextLine()) {
if(scanner.hasNext());
int number = Integer.valueOf(scanner.next());
scanner.nextLine();
if(scanner.hasNext());
int data = Integer.valueOf(scanner.next());
scanner.skip(scanner.delimiter());
temps.add(number);
temps.add(data);
}
确保您的文件仅包含可转换为int值,您可以进行如下控件:
String dataS = scanner.next();
if(StringUtils.isNumeric(String dataS))
int data = Integer.valueOf(dataS);
StringUtils.isNumeric()
来自 Apache Commons