Java 尝试使用正则表达式读取文本文件以检查每一行
我正在尝试编写一个程序,允许用户输入一部电影的名称,然后程序将生成与之相关的日期。我有一个文本文件,上面有日期和与之相关的电影。我通过扫描仪读取文件,创建了一个电影类,分别存储电影和日期的ArrayList和String。我在阅读这些文件时遇到困难。谁能帮我一下吗。谢谢大家! 以下是文本文件的一部分:Java 尝试使用正则表达式读取文本文件以检查每一行,java,regex,arraylist,java.util.scanner,Java,Regex,Arraylist,Java.util.scanner,我正在尝试编写一个程序,允许用户输入一部电影的名称,然后程序将生成与之相关的日期。我有一个文本文件,上面有日期和与之相关的电影。我通过扫描仪读取文件,创建了一个电影类,分别存储电影和日期的ArrayList和String。我在阅读这些文件时遇到困难。谁能帮我一下吗。谢谢大家! 以下是文本文件的一部分: 10/1/2014 Der Anstandige "Men, Women and Children" Nas: Time is Illmatic 10/2/2014
10/1/2014
Der Anstandige
"Men, Women and Children"
Nas: Time is Illmatic
10/2/2014
Bang Bang
Haider
10/3/2014
Annabelle
Bitter Honey
Breakup Buddies
La chambre bleue
Drive Hard
Gone Girl
The Good Lie
A Good Marriage
The Hero of Color City
Inner Demons
Left Behind
Libertador
The Supreme Price
这是我的电影课
import java.util.ArrayList;
public class movie
{
private ArrayList<String> movies;
private String date;
public movie(ArrayList<String> movies, String date)
{
this.movies = movies;
this.date = date;
}
public String getDate()
{
return date;
}
public void setDate(String date)
{
this.date = date;
}
public ArrayList<String> getMovies()
{
return movies;
}
}
import java.util.ArrayList;
公映
{
私人电影;
私有字符串日期;
公共电影(ArrayList电影,字符串日期)
{
这部电影=电影;
this.date=日期;
}
公共字符串getDate()
{
返回日期;
}
公共无效设置日期(字符串日期)
{
this.date=日期;
}
公共阵列列表getMovies()
{
返回电影;
}
}
下面是readFile类
package Read;
import java.util.List;
import java.io.File;
import java.util.ArrayList;
import java.util.Scanner;
public class readFile
{
public static List<movie> movies;
public static String realPath;
public static ArrayList<String> mov;
public static String j;
public static String i;
public static void main(String[]args)
{
//movies = new ArrayList<movie>();
realPath = "movie_release_dates.txt";
File f = new File(realPath);
try
{
String regex1 = "[^(0-9).+]";
String regex2 = "[^0-9$]";
Scanner sc = new Scanner(f);
while (sc.hasNextLine())
{
System.out.println("Hello");
//movies
if(!sc.nextLine().matches(regex2))
{
i = sc.nextLine();
System.out.println("Hello2");
System.out.println(i);
}
//date
while(sc.nextLine().matches(regex1))
{
System.out.println("Hello3");
if(!sc.nextLine().matches(regex1))
{
j = sc.nextLine();
mov.add(sc.nextLine());
System.out.println("Hello4");
}
}
movie movie = new movie(mov,i);
movies.add(movie);
}
// sc.close();
}
catch(Exception e)
{
System.out.println("CANT");
}
}
}
包读取;
导入java.util.List;
导入java.io.File;
导入java.util.ArrayList;
导入java.util.Scanner;
公共类读取文件
{
公共静态列表电影;
公共静态字符串realPath;
公共静态数组列表mov;
公共静态字符串j;
公共静态字符串i;
公共静态void main(字符串[]args)
{
//电影=新的ArrayList();
realPath=“movie\u release\u dates.txt”;
文件f=新文件(realPath);
尝试
{
字符串regex1=“[^(0-9)。+]”;
字符串regex2=“[^0-9$]”;
扫描仪sc=新扫描仪(f);
while(sc.hasNextLine())
{
System.out.println(“你好”);
//电影
如果(!sc.nextLine().匹配(regex2))
{
i=sc.nextLine();
System.out.println(“Hello2”);
系统输出打印LN(i);
}
//日期
while(sc.nextLine().matches(regex1))
{
System.out.println(“Hello3”);
如果(!sc.nextLine().匹配(regex1))
{
j=sc.nextLine();
mov.add(sc.nextLine());
System.out.println(“Hello4”);
}
}
电影=新电影(mov,i);
添加(电影);
}
//sc.close();
}
捕获(例外e)
{
系统输出打印项次(“超高”);
}
}
}
package com.stackoverflow.q26269799;
导入java.util.List;
导入java.io.File;
导入java.util.ArrayList;
导入java.util.Scanner;
公共类读取文件{
public static List movies=new ArrayList();
公共静态字符串realPath;
公共静态数组列表mov;
公共静态字符串j;
公共静态字符串i;
公共静态void main(字符串[]args){
//电影=新的ArrayList();
realPath=“movie\u release\u dates.txt”;
文件f=新文件(realPath);
如果(!f.exists()){
System.err.println(“未指定文件路径”);
}
试一试{
字符串regex1=“[^(0-9)。+]”;
字符串regex2=“[^0-9$]”;
扫描仪sc=新扫描仪(f);
while(sc.hasNextLine()){
System.out.println(“你好”);
//电影
字符串nextLine=sc.nextLine();
如果(下一行!=null){
如果(!nextLine.matches(regex2)){
i=下一行;
System.out.println(“Hello2”);
系统输出打印LN(i);
}
//日期
while(nextLine!=null&&nextLine.matches(regex1)){
System.out.println(“Hello3”);
如果(!nextLine.matches(regex1)){
j=下一行;
移动添加(下一行);
System.out.println(“Hello4”);
}
nextLine=sc.nextLine();
}
}
电影=新电影(mov,i);
添加(电影);
}
//sc.close();
}捕获(例外e){
抛出新的运行时异常(e);
}
}
}
//movies=newarraylist()代码>
您不应该在每次检查中都调用sc.nextLine()。每个NextLine()调用都读取下一行。这意味着您正在检查一行并处理下一行
import java.io.File;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.LineNumberReader;
import java.util.Map;
import java.util.Map.Entry;
import java.util.TreeMap;
public class ReadFile
{
Map<String, String> movies;
public static void main(String[] args) throws IOException
{
ReadFile readFile = new ReadFile();
readFile.movies = new TreeMap<>();
try
{
readFile.importData();
printf(readFile.queryData("Der Anstandige"));
printf(readFile.queryData("Bitter"));
printf(readFile.queryData("blah"));
printf(readFile.queryData("the"));
}
catch(IOException e)
{
throw(e);
}
}
void importData() throws IOException, FileNotFoundException
{
LineNumberReader reader = null;
File file = new File("c:/movie_release_dates.txt");
try
{
reader = new LineNumberReader(new FileReader(file), 1024*64); //
String line;
String date = null, movie = null;
while((line = reader.readLine()) != null)
{
line = line.trim();
if(line.equals("")) continue;
if(line.matches(PATTERN_DATE))
{
date = line;
date = strf("%s/%s",
date.substring(date.length() - 4),
date.substring(0, date.length() - 5));
continue;
}
else
{
movie = line.trim();
}
movies.put(movie, date);
}
}
catch(FileNotFoundException e)
{
throw(e);
}
finally
{
reader.close();
}
}
String queryData(String title)
{
String regex = "(?i)" + title.replaceAll("\\s", "\\s+");
String[] matches = new String[movies.size()];
int i = 0; for(Entry<String , String> movie : movies.entrySet())
{
String key = movie.getKey();
String val = movie.getValue();
if(key.matches(regex))
{
matches[i++] = strf("{movie=%s, date=%s}", key, val);
}
else if(key.toUpperCase().trim()
.contains(title.toUpperCase().trim()))
{
matches[i++] = strf("{movie=%s, date=%s}", key, val);
}
}
String string = "";
if(matches[0] == null)
{
string = "Not found\n";
}
else
{
i = 0; while(matches[i] != null)
{
string += matches[i++] + "\n";
}
}
return string;
}
final String strf(String arg0, Object ... arg1)
{
return String.format(arg0, arg1);
}
final static void printf(String format, Object ... args)
{
System.out.printf(format, args);
}
final static void println(String x)
{
System.out.println(x);
}
final String PATTERN_DATE = "\\d{1,2}\\/\\d{1,2}\\/\\d{4}";
}
导入java.io.FileNotFoundException;
导入java.io.FileReader;
导入java.io.IOException;
导入java.io.LineNumberReader;
导入java.util.Map;
导入java.util.Map.Entry;
导入java.util.TreeMap;
公共类读取文件
{
地图电影;
公共静态void main(字符串[]args)引发IOException
{
ReadFile ReadFile=新的ReadFile();
readFile.movies=newtreemap();
尝试
{
readFile.importData();
printf(readFile.queryData(“Der Anstandige”);
printf(readFile.queryData(“Bitter”);
printf(readFile.queryData(“blah”);
printf(readFile.queryData(“the”));
}
捕获(IOE异常)
{
投掷(e);
}
}
void importData()引发IOException、FileNotFoundException
{
行号里德
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.LineNumberReader;
import java.util.Map;
import java.util.Map.Entry;
import java.util.TreeMap;
public class ReadFile
{
Map<String, String> movies;
public static void main(String[] args) throws IOException
{
ReadFile readFile = new ReadFile();
readFile.movies = new TreeMap<>();
try
{
readFile.importData();
printf(readFile.queryData("Der Anstandige"));
printf(readFile.queryData("Bitter"));
printf(readFile.queryData("blah"));
printf(readFile.queryData("the"));
}
catch(IOException e)
{
throw(e);
}
}
void importData() throws IOException, FileNotFoundException
{
LineNumberReader reader = null;
File file = new File("c:/movie_release_dates.txt");
try
{
reader = new LineNumberReader(new FileReader(file), 1024*64); //
String line;
String date = null, movie = null;
while((line = reader.readLine()) != null)
{
line = line.trim();
if(line.equals("")) continue;
if(line.matches(PATTERN_DATE))
{
date = line;
date = strf("%s/%s",
date.substring(date.length() - 4),
date.substring(0, date.length() - 5));
continue;
}
else
{
movie = line.trim();
}
movies.put(movie, date);
}
}
catch(FileNotFoundException e)
{
throw(e);
}
finally
{
reader.close();
}
}
String queryData(String title)
{
String regex = "(?i)" + title.replaceAll("\\s", "\\s+");
String[] matches = new String[movies.size()];
int i = 0; for(Entry<String , String> movie : movies.entrySet())
{
String key = movie.getKey();
String val = movie.getValue();
if(key.matches(regex))
{
matches[i++] = strf("{movie=%s, date=%s}", key, val);
}
else if(key.toUpperCase().trim()
.contains(title.toUpperCase().trim()))
{
matches[i++] = strf("{movie=%s, date=%s}", key, val);
}
}
String string = "";
if(matches[0] == null)
{
string = "Not found\n";
}
else
{
i = 0; while(matches[i] != null)
{
string += matches[i++] + "\n";
}
}
return string;
}
final String strf(String arg0, Object ... arg1)
{
return String.format(arg0, arg1);
}
final static void printf(String format, Object ... args)
{
System.out.printf(format, args);
}
final static void println(String x)
{
System.out.println(x);
}
final String PATTERN_DATE = "\\d{1,2}\\/\\d{1,2}\\/\\d{4}";
}