如何搜索行中file.txt中包含字符串

问题描述 投票:0回答:2

我在文件中搜索字符串行时遇到问题,这是我的代码

public static void main( String[] args ) throws SQLException
    {
        try{
        //System.out.println( "Hello World!" );
             RepositoryFactory.emf=Persistence.createEntityManagerFactory("onezero");
        String Symbol = "EURUSD";
        TradingHistory tradingHistorys = RepositoryFactory.getTradingHistoryRepo().findPriceEmpty(Symbol);
        String symbols = tradingHistorys.getSymbol();
        String created = tradingHistorys.getCreated_at();
        String[] createds = created.split(" ");
        String tanggal = createds[0];
        String times = createds[1];
        String timeSearch = tanggal.concat("T").concat(times);
        String pathfile = "/home/ec2-user/saveFile/";
        String filesearch = pathfile.concat(tanggal).concat("-").concat(symbols).concat(".txt");
        SearchFile(timeSearch,filesearch);

        System.out.print(symbols+"|"+created+"|"+filesearch+timeSearch);
    }catch (Exception e){
        System.out.print(e);
    }
    }

这里是我在文件中搜索字符串的方法

private static void SearchFile(String timeSearch, String filesearch) {
        String line = null;
        ArrayList<String> fileContents = new ArrayList<String>();
         try {
                FileReader fReader = new FileReader(filesearch);
                BufferedReader fileBuff = new BufferedReader(fReader);
                while ((line = fileBuff.readLine()) != null) {
                    fileContents.add(line);
                }
                fileBuff.close();
            } catch (Exception e) {
                System.out.println(e.getMessage());
            }
         System.out.println(fileContents.contains(timeSearch));
    }

以及我使用时

Scanner fileScanner = new Scanner(new File(filesearch));
          int lineID = 0;
          java.util.List lineNumbers = new ArrayList();
          Pattern pattern =  Pattern.compile(timeSearch);
          Matcher matcher = null;
          while(fileScanner.hasNextLine()){
                String line = fileScanner.nextLine();
                lineID++;
                matcher = pattern.matcher(line);
                if(matcher.find()){
                    lineNumbers.add(lineID);

                }


            }
            System.out.println(lineNumbers);
        }

我得到了[183394、183395、183396、183397、183398、183399、183400、183401、183402、183403、183404、183405、183406]]

当我运行我的代码时出现错误,这是错误的。但是当我搜索手册时,值是

文件名是2020-05-05-EURUSD.txtEUR / USD | 1.09031 | 2020-05-05T04:30:17.008欧元/美元| 1.0903 | 2020-05-05T04:30:17.046EUR / USD | 1.09029 | 2020-05-05T04:30:17.211欧元/美元| 1.0903 | 2020-05-05T04:30:17.340EUR / USD | 1.09027 | 2020-05-05T04:30:17.348欧元/美元| 1.0903 | 2020-05-05T04:30:17.509EUR / USD | 1.09027 | 2020-05-05T04:30:17.518EUR / USD | 1.0903 | 2020-05-05T04:30:17.547EUR / USD | 1.09027 | 2020-05-05T04:30:17.558EUR / USD | 1.0903 | 2020-05-05T04:30:17.712EUR / USD | 1.09027 | 2020-05-05T04:30:17.718EUR / USD | 1.0903 | 2020-05-05T04:30:17.841EUR / USD | 1.09027 | 2020-05-05T04:30:17.848

如何在file.txt中修复搜索字符串?

这是我得到的日志

false
EURUSD|2020-05-05 04:30:17|2020-05-05 04:30:17/home/ec2-user/saveFile/2020-05-05-EURUSD.txt2020-05-05T04:30:17
java file filereader
2个回答
0
投票

fileContents.contains(timeSearch)检查fileContents的任何元素(文件的每一行)是否等于timeSearch

您应该对fileContents的每个元素(文件的每一行)使用String contains()方法

public static void main(String[] args) {
    String filePath2 = Paths.get("").toAbsolutePath().toString();
    String path = filePath2.concat("\\files\\2020-05-05-EURUSD.txt");
    searchFile("2020-05-05T04:30:17", path);
}

private static void searchFile(String timeSearch, String filesearch) {
    String line = null;
    ArrayList<String> fileContents = new ArrayList<String>();
     try {
            FileReader fReader = new FileReader(filesearch);
            BufferedReader fileBuff = new BufferedReader(fReader);
            while ((line = fileBuff.readLine()) != null) {
                fileContents.add(line);
            }
            fileBuff.close();
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
     System.out.println(fileContents.contains(timeSearch));

     boolean result =false;
     for (String elementOfArrayList : fileContents) {
        if(elementOfArrayList.contains(timeSearch)) {
            result=true;
            break;
        }
    }
     System.out.println(result);
}

0
投票
private static  void SearchFile(String timeSearch, String filesearch) throws IOException {
        Scanner fileScanner = new Scanner(new File(filesearch));
          int lineID = 0;
          java.util.List lineNumbers = new ArrayList();
          ArrayList<Double> list = new ArrayList<Double>(); 
          Pattern pattern =  Pattern.compile(timeSearch);
          Matcher matcher = null;
          while(fileScanner.hasNextLine()){
                String line = fileScanner.nextLine();
                lineID++;
                matcher = pattern.matcher(line);
                if(matcher.find()){
                    lineNumbers.add(lineID);
                    String lines = Files.readAllLines(Paths.get(filesearch)).get(lineID);
                    String[] LineGetPrice = lines.split("\\|", 2);
                    String price = LineGetPrice[1];
                    String[] pricestringArray = price.split("\\|", 2);
                    String prices=pricestringArray[0];
                    Double priced = Double.parseDouble(prices);
                    list.add(priced);
                    //Double MinPrice = getMinValue(list);
                    System.out.println(lines+prices);
                    //System.out.println(list);
                }


            }
            System.out.println(lineNumbers);
            System.out.println(list);
            Double MinPrice = getMinValue(list);
            System.out.println(list+"|"+MinPrice);

        }

我已更新并使用此代码,我可以获得价格和所有与数据匹配的行

感谢所有在这里帮助我的人

© www.soinside.com 2019 - 2024. All rights reserved.