我在文件中搜索字符串行时遇到问题,这是我的代码
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
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);
}
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);
}
我已更新并使用此代码,我可以获得价格和所有与数据匹配的行
感谢所有在这里帮助我的人