Java 尝试使用正则表达式读取文本文件以检查每一行

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

我正在尝试编写一个程序,允许用户输入一部电影的名称,然后程序将生成与之相关的日期。我有一个文本文件,上面有日期和与之相关的电影。我通过扫描仪读取文件,创建了一个电影类,分别存储电影和日期的ArrayList和String。我在阅读这些文件时遇到困难。谁能帮我一下吗。谢谢大家!

以下是文本文件的一部分:

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()
  • 每次调用nextLine时,它都会将扫描点移动到下一行。所以,每次调用一次,检查它是否匹配那些正则表达式<代码>字符串nextLine=sc.nextLine()
  • 请检查是否指定了文件路径

  • 您不应该在每次检查中都调用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}";
    }