JAVA:无法理解如何使用输入文件
JAVA: Trouble understanding how to work with input files
我是 JAVA 和这个论坛的新手,我正在尝试找出一个项目的问题,该项目从文件中给定的三个边对三角形进行分类。该文件可以是多个不同的行(多个三角形),行必须以'#'开头才能被程序视为有效,并且在列出三边后可以有不同类型的多余数据。此处供参考的是示例输入文件和程序运行时应生成的相应输出文件。 input/output reference。
我对我的大部分程序都很有信心,但我遇到的具体问题是在我的主要方法中处理输入文件。我不明白 a) 如何让程序只识别以“#”开头的行作为有效输入。 b) 如何到达“#”之后的下一个扫描器标记,并仅当它们是整数时才将这三个标记分配给 1-3 边(它们不一定必须是)。 c) 如何将边后的剩余数据(如果有)分配给 String 变量。
如果您知道有任何有用的扫描仪方法可以帮助我,我将不胜感激。通读 JAVA API 对我来说仍然是希腊语。最重要的是,如果有一种方法 returns 当前令牌的数据类型是什么,我会不断收到 InputMismatchException,因为我试图将非整数分配给我的双方。
最后这是我一直困扰着我的主要方法。再次感谢您提供的任何见解。
public static void main (String[] args) throws FileNotFoundException, IOException
{
String input, output;
int side1 = 0, side2 = 0, side3 = 0, lineCounter = 1;
String irrelevant;
File inputFile;
Scanner inputRead = null;
System.out.println("Please choose the .txt file you would like to use for triangle side input.");
input = fileSelect();
System.out.println("Please choose the .txt file you would like to use as the program output file.");
output = fileSelect();
FileWrite outputFile = new FileWrite();
outputFile.fileCreate(output);
inputFile = new File(input);
try
{
inputRead = new Scanner(inputFile);
}
catch (FileNotFoundException e)
{
System.out.println("No file or unsupported file found: Please choose another input file.");
input = fileSelect();
}
while (inputRead.hasNextLine())
{
String line = inputRead.nextLine();
while (line != null)
{
if(inputRead.hasNext("#"))
{
side1 = inputRead.nextInt();
side2 = inputRead.nextInt();
side3 = inputRead.nextInt();
irrelevant = inputRead.next();
areaCalc(side1, side2, side3, lineCounter, output);
}
lineCounter ++;
}
}
if (!inputRead.hasNext())
{
}
inputRead.close();
}
像下面这样进行行解析怎么样
try {
String content[] = line.split(" ");
if(content.length > 3) {
if(content[0].equals("#")) {
int side1 = Integer.valueOf(content[1]);
int side2 = Integer.valueOf(content[2]);
int side3 = Integer.valueOf(content[3]);
if(side1 > 0 && side2 > 0 && side3 > 0) {
areaCalc(side1, side2, side3, lineCounter, output);
}
}
}
}catch(NumberFormatException e){}
我是 JAVA 和这个论坛的新手,我正在尝试找出一个项目的问题,该项目从文件中给定的三个边对三角形进行分类。该文件可以是多个不同的行(多个三角形),行必须以'#'开头才能被程序视为有效,并且在列出三边后可以有不同类型的多余数据。此处供参考的是示例输入文件和程序运行时应生成的相应输出文件。 input/output reference。 我对我的大部分程序都很有信心,但我遇到的具体问题是在我的主要方法中处理输入文件。我不明白 a) 如何让程序只识别以“#”开头的行作为有效输入。 b) 如何到达“#”之后的下一个扫描器标记,并仅当它们是整数时才将这三个标记分配给 1-3 边(它们不一定必须是)。 c) 如何将边后的剩余数据(如果有)分配给 String 变量。 如果您知道有任何有用的扫描仪方法可以帮助我,我将不胜感激。通读 JAVA API 对我来说仍然是希腊语。最重要的是,如果有一种方法 returns 当前令牌的数据类型是什么,我会不断收到 InputMismatchException,因为我试图将非整数分配给我的双方。 最后这是我一直困扰着我的主要方法。再次感谢您提供的任何见解。
public static void main (String[] args) throws FileNotFoundException, IOException
{
String input, output;
int side1 = 0, side2 = 0, side3 = 0, lineCounter = 1;
String irrelevant;
File inputFile;
Scanner inputRead = null;
System.out.println("Please choose the .txt file you would like to use for triangle side input.");
input = fileSelect();
System.out.println("Please choose the .txt file you would like to use as the program output file.");
output = fileSelect();
FileWrite outputFile = new FileWrite();
outputFile.fileCreate(output);
inputFile = new File(input);
try
{
inputRead = new Scanner(inputFile);
}
catch (FileNotFoundException e)
{
System.out.println("No file or unsupported file found: Please choose another input file.");
input = fileSelect();
}
while (inputRead.hasNextLine())
{
String line = inputRead.nextLine();
while (line != null)
{
if(inputRead.hasNext("#"))
{
side1 = inputRead.nextInt();
side2 = inputRead.nextInt();
side3 = inputRead.nextInt();
irrelevant = inputRead.next();
areaCalc(side1, side2, side3, lineCounter, output);
}
lineCounter ++;
}
}
if (!inputRead.hasNext())
{
}
inputRead.close();
}
像下面这样进行行解析怎么样
try {
String content[] = line.split(" ");
if(content.length > 3) {
if(content[0].equals("#")) {
int side1 = Integer.valueOf(content[1]);
int side2 = Integer.valueOf(content[2]);
int side3 = Integer.valueOf(content[3]);
if(side1 > 0 && side2 > 0 && side3 > 0) {
areaCalc(side1, side2, side3, lineCounter, output);
}
}
}
}catch(NumberFormatException e){}