Java 在txt文件中查找整数和浮点数

Java 在txt文件中查找整数和浮点数,java,file,txt,Java,File,Txt,我有一个简单的代码问题,不知道怎么做; 我有3个txt文件。 第一个txt文件如下所示: 1 2 3 4 5 4.5 4,6 6.8 8,9 1 3 4 5 8 9,2 6,3 6,7 8.9 我想从这个txt文件中读取数字,并将整数保存到一个txt文件中,然后浮动到另一个txt文件中 我的代码: import java.io.*; 公共班机{ 公共静态void main(字符串[]args)引发IOException{ FileInputStream fstream=新的FileInputS

我有一个简单的代码问题,不知道怎么做; 我有3个txt文件。 第一个txt文件如下所示:

1 2 3 4 5 4.5 4,6 6.8 8,9
1 3 4 5 8 9,2 6,3 6,7 8.9
我想从这个txt文件中读取数字,并将整数保存到一个txt文件中,然后浮动到另一个txt文件中

我的代码:

import java.io.*;
公共班机{
公共静态void main(字符串[]args)引发IOException{
FileInputStream fstream=新的FileInputStream(“C:\\…\\t.txt”);
DataInputStream in=新的DataInputStream(fstream);
BufferedReader br=新的BufferedReader(新的InputStreamReader(in));
FileWriter ostream=newfilewriter(“C:\\…\\t2.txt”);
BufferedWriter out=新的BufferedWriter(ostream);
FileWriter ostream2=新的FileWriter(“C:\\Users\\…\\t3.txt”);
BufferedWriter out2=新的BufferedWriter(ostream2);
字符串str=br.readLine();
char ch;

对于(int i=0;i假设
也是一个十进制分隔符
,则可以统一此字符(将
替换为

static void readAndWriteNumbers(字符串inputFile、字符串intNums、字符串dblNums)引发IOException{
//使用StringBuilder分别收集int和double数字
StringBuilder ints=新的StringBuilder();
StringBuilder dbls=新的StringBuilder();
Files.lines(path.get(inputFile))//字符串流
.map(str->str.replace(',',')//统一十进制分隔符
.map(str->{
Arrays.stream(str.split(\\s+)).forEach(v->{//将每一行拆分为令牌
如果(v.包含(“.”){
if(dbls.length()>0&&!dbls.toString().endsWith(System.lineSeparator()){
dbls.append(“”);
}
附加(v);
}
否则{
if(ints.length()>0&&!ints.toString().endsWith(System.lineSeparator())){
ints.追加(“”);
}
附加说明(v);
}
}); 
return System.lineSeparator();//返回新行
})
.forEach(s->{ints.append(s);dbls.append(s);});//在结果中保留行
//使用字符串生成器中的内容编写文件
试一试(
FileWriter intWriter=新的FileWriter(intNums);
FileWriter dblWriter=新的FileWriter(dblNums);
) {
intWriter.write(ints.toString());
dblWriter.write(dbls.toString());
}
}
//试验
读写枚举器(“test.dat”、“ints.dat”、“dbls.dat”);
输出

//ints.dat
1    2    3    4    5  
1    3    4    5    8  

// dbls.dat
4.5  4.6  6.8  8.9
9.2  6.3  6.7  8.9


您可以通过以下简单步骤完成此操作:

  • 当您读取一行时,将其拆分为空白并获得一个令牌数组
  • 在处理每个令牌时,
    • 修剪任何前导和尾随空格,然后将
      替换为
    • 首先检查令牌是否可以解析为
      int
      。如果可以,将其写入
      outInt
      (整数的写入器)。否则,检查令牌是否可以解析为
      float
      。如果可以,将其写入
      outFloat
      (浮点的写入器)。否则,忽略它
  • 演示:

    import java.io.BufferedReader;
    import java.io.BufferedWriter;
    import java.io.FileNotFoundException;
    import java.io.FileReader;
    import java.io.FileWriter;
    import java.io.IOException;
    
    public class Main {
        public static void main(String[] args) throws FileNotFoundException, IOException {
            BufferedReader in = new BufferedReader(new FileReader("t.txt"));
            BufferedWriter outInt = new BufferedWriter(new FileWriter("t2.txt"));
            BufferedWriter outFloat = new BufferedWriter(new FileWriter("t3.txt"));
            String line = "";
    
            while ((line = in.readLine()) != null) {// Read until EOF is reached
                // Split the line on whitespace and get an array of tokens
                String[] tokens = line.split("\\s+");
    
                // Process each token
                for (String s : tokens) {
                    // Trim any leading and trailing whitespace and then replace , with .
                    s = s.trim().replace(',', '.');
    
                    // First check if the token can be parsed into an int
                    try {
                        Integer.parseInt(s);
                        // If yes, write it into outInt
                        outInt.write(s + " ");
                    } catch (NumberFormatException e) {
                        // Otherwise, check if token can be parsed into float
                        try {
                            Float.parseFloat(s);
                            // If yes, write it into outFloat
                            outFloat.write(s + " ");
                        } catch (NumberFormatException ex) {
                            // Otherwise, ignore it
                        }
                    }
                }
            }
    
            in.close();
            outInt.close();
            outFloat.close();
        }
    }
    

    请描述您的代码有什么问题。示例中的逗号是分隔符还是十进制逗号,6,7与6.7或6和7相同?文件是否也只能有数字或字母?是否所有整数都是数字,或者是否大于9?(看起来是一个好的实践问题)6,7和6.7是一样的,文件只能有数字,整数可以大于9;很抱歉这么不精确,这段代码不起作用,我也不知道why@MarekOS-我已测试正常工作。如果解决了问题,您可以在下面对此代码进行注释,确认相同。感谢您的帮助。您能告诉我在何处粘贴到f的路径吗iles?路径作为字符串传递给
    读写枚举器(String inputFile、String intNums、String dblNums)
    ,第一个参数是输入文件的路径,另外两个是输出的路径。您是天才,谢谢:)