Как искать строки, содержащие строку в file.txt - PullRequest
0 голосов
/ 05 мая 2020

У меня проблема, когда я хочу найти строку строки в файле, это мой код

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]

при запуске кода i есть ошибка есть ложь. но когда я ищу руководство, там значение

имя файла: 2020-05-05-EURUSD.txt EUR / USD | 1.09031 | 2020-05-05T04: 30: 17.008 EUR / USD | 1.0903 | 2020 -05-05T04: 30: 17.046 EUR / USD | 1.09029 | 2020-05-05T04: 30: 17.211 EUR / USD | 1.0903 | 2020-05-05T04: 30: 17.340 EUR / USD | 1.09027 | 2020-05-05T04: 30: 17.348 EUR / USD | 1.0903 | 2020-05-05T04: 30: 17.509 EUR / USD | 1.09027 | 2020-05-05T04: 30: 17.518 EUR / USD | 1.0903 | 2020-05-05T04: 30: 17.547 EUR / USD | 1.09027 | 2020-05-05T04: 30: 17.558 EUR / USD | 1.0903 | 2020-05-05T04: 30: 17.712 EUR / USD | 1.09027 | 2020-05-05T04: 30: 17.718 EUR / USD | 1.0903 | 2020 -05-05T04: 30: 17.841 EUR / 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

Ответы [ 2 ]

0 голосов
/ 05 мая 2020
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);

        }

У меня есть обновление, и я использую этот код, я могу получить цену и всю строку для соответствия данным

спасибо всем, кто мне здесь помогает

0 голосов
/ 05 мая 2020

fileContents.contains (timeSearch) проверяет, равен ли какой-либо элемент fileContents (каждая строка вашего файла) timeSearch

, вы должны использовать метод String contains() для каждого элемента fileContents (каждая строка вашего файла )

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);
}
...