Java文本文件从四列文本文件中删除双精度

Java文本文件从四列文本文件中删除双精度,java,io,text-files,Java,Io,Text Files,我必须编写一个代码来获取一个包含整数和双精度的文本文件,并在一个文件中打印双精度,在另一个文件中打印整数。文本文件的格式如下所示: double int int int double int int int ... double int int int 它保存在“raw.txt”文件中 输出应该如下所示: int int int int int int ... int int int 这就是我迄今为止所尝试的: import java.io.*; import

我必须编写一个代码来获取一个包含整数和双精度的文本文件,并在一个文件中打印双精度,在另一个文件中打印整数。文本文件的格式如下所示:

double int int int  
double int int int  
...  
double int int int
它保存在
“raw.txt”
文件中

输出应该如下所示:

int int int  
int int int   
...  
int int int  
这就是我迄今为止所尝试的:

import java.io.*;
import java.util.*;

public class DATA {
    public static void main(String[] args) throws FileNotFoundException {
        PrintWriter writer = new PrintWriter(new File("sorted.txt"));
        Scanner reader = new Scanner(new File("raw.txt"));
        int temp = 0, count = 1;
        while (reader.hasNext()) {
            try {
                temp = reader.nextInt();
            }
            catch (InputMismatchException e) {
                reader.nextLine();
                temp = (int) reader.nextDouble();
            }
            writer.print(temp);
            if (count % 4 == 0) 
                writer.println(); 
            count++;    

        }
        writer.close();
        reader.close();
    }
}

当前代码抛出一个
输入不匹配异常
。非常感谢您的帮助。

输入不匹配异常
可以抛出,因为它是下一个整数,或者是双精度的
最好将一部分作为字符串阅读,然后决定
在决定时,它抛出可以捕获的
NumberFormatException
在下面的代码中,有两个编写器按您的需要分开,这可能比这段代码看起来更好
我已经把你写的东西改成文件了。我还没有测试过它,但我真的认为如果你做了
writer.print(temp),它将把所有整数放在没有空格的地方,这样就没用了。
请尝试此代码,但未经测试

import java.io.*;
import java.util.*;

public class DATA {
     public static void main(String[] args) throws FileNotFoundException {
        PrintWriter writerInt = new PrintWriter(new File("sortedInt.txt"));
        PrintWriter writerDou = new PrintWriter(new File("sortedDou.txt"));
        Scanner reader = new Scanner(new File("raw.txt"));
        int temp = 0, countInt = 1, countDou = 1;
        while (reader.hasNext()) {
            String next = reader.next();
            try{
                temp=Integer.parseInt(next);
                writerInt.print(temp+" ");
                if (countInt % 4 == 0) 
                    writerInt.println(); 
                countInt++;    
            }catch(NumberFormatException e){
                try{
                    writerDou.print(Double.parseDouble(next)+" ");
                    if (countDou % 4 == 0) 
                        writerDou.println(); 
                    countDou++;   
                }catch(NumberFormatException f){
                    System.out.println("Not a number");
                }
            }

        }
        writerInt.close();
        writerDou.close();
        reader.close();
    }
}

根据您提供的代码,您只希望分割文件,而不关心
double
int
值本身。因此,您可以将该文件作为普通文本文件处理,并通过分隔空白字符分割值

该代码段对
raw.txt
文件的格式做了一些假设,但没有得到优化。因此,根据您的需要修改它应该是一项简单的任务

public static void main(String[] args) throws IOException {
    List<String> rawLines = Files.readAllLines(Paths.get("raw.txt"));
    try (Writer intWriter = Files.newBufferedWriter(
            Paths.get("int_values.txt"),
            StandardOpenOption.CREATE_NEW);
         Writer doubleWriter = Files.newBufferedWriter(
            Paths.get("double_values.txt"),
            StandardOpenOption.CREATE_NEW)) {
        for (String line : rawLines) {
            // the split might need to be amended if the values
            // are not separated by a single blank
            String[] values = line.split(" ");

            // to be amended if there are not alway four values in a row
            if (values.length != 4) {
                continue;
            }

            doubleWriter.write(values[0]);
            doubleWriter.write(System.lineSeparator());

            intWriter.write(values[1]);
            intWriter.write(' ');
            intWriter.write(values[2]);
            intWriter.write(' ');
            intWriter.write(values[3]);
            intWriter.write(' ');
            intWriter.write(System.lineSeparator());
        }
    }
}
publicstaticvoidmain(字符串[]args)引发IOException{
列出rawLines=Files.readAllLines(path.get(“raw.txt”);
try(Writer intWriter=Files.newBufferedWriter)(
get(“int_values.txt”),
标准打开选项。创建(新的);
Writer doubleWriter=Files.newBufferedWriter(
get(“double_values.txt”),
标准打开选项。创建(新建){
用于(字符串行:原始行){
//如果值
//没有用一个空格分隔
字符串[]值=行。拆分(“”);
//如果一行中不总是有四个值,则进行修改
如果(value.length!=4){
继续;
}
doubleWriter.write(值[0]);
doubleWriter.write(System.lineSeparator());
intWriter.write(值[1]);
intWriter.write(“”);
intWriter.write(值[2]);
intWriter.write(“”);
intWriter.write(值[3]);
intWriter.write(“”);
write(System.lineSeparator());
}
}
}

此代码有什么问题?它正在创建文件吗?当前代码抛出一个
输入不匹配异常
。我不知道为什么,因为我确实包围了唯一一行,它可以在try-catch块中抛出。但在不知道实际输入的情况下,这仍然是一个猜测。同意@SubOptimal,将有一些奇怪的字符串或可能有奇怪的本地化小数点