I am extracting some strings from several documents using regular expressions. I am stuck at this "StackOverflowError" which comes for a specific regular expression.Without using that regex, the program executes smoothly.
My Code:
package com.gauge.ie.Annotator;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.UUID;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.print.attribute.Size2DSyntax;
import org.apache.commons.io.FilenameUtils;
import org.apache.uima.util.FileUtils;
public class RecursiveFileDisplay
{
static List<String> misclist=new ArrayList<String>();
static List<String> list=new ArrayList<String>();
static LinkedHashMap<String,String> authormap=new LinkedHashMap<>();
static List<String> random=new ArrayList<String>();
static List<String> benchlist=new ArrayList<String>();
static LinkedHashMap<String,String> benchmap=new LinkedHashMap<>();
static List<String> misc1list=new ArrayList<String>();
String csvfile="/home/gauge/Documents/Docs/madras.csv";
FileWriter fw;
public RecursiveFileDisplay()throws IOException
{
fw=new FileWriter("/home/gauge/Documents/Docs/supremecourt.csv",true);
// TODO Auto-generated constructor stub
}
public static void main(String[] args) throws Exception
{
RecursiveFileDisplay rsd=new RecursiveFileDisplay();
File currentDir = new File("/home/gauge/Documents/Docs/SampleData/SupremeCourt");
rsd.readFilesFromDirectory(currentDir);
System.out.println(benchlist.size());
System.out.println(list.size());
System.out.println(random.size());
rsd.writeCSV();
}
public void writeCSV()throws IOException
{
for(String str:list)
{
fw.append(str);
fw.append("\n");
fw.flush();
}
System.out.println("Csv file is done!");
}
public void readFilesFromDirectory(File dir)
{
try
{
int i=0;
Pattern p1=Pattern.compile("(Author):(.*)");
Pattern p=Pattern.compile("(Bench:)(.*)");
Pattern p2=Pattern.compile("JUDGMENT(.*?)J[.]");
Pattern p3=Pattern.compile("(([H|h]on)|(HON)).*((ble)|BLE)(.*)");
//Pattern p4=Pattern.compile(",\\s*([^,]+),[^,]*\\b(J|JJ)\\.");//\s\w*(?=\w*[,]\sJ[.]*\b)
Pattern p5=Pattern.compile("\\s\\w*(?=\\w*[,]\\sJ[.]*\\b)");
Pattern p4=Pattern.compile("\\w*(?=\\w*[,]*\\s*((JJ)|(L.J)|(C.J)|(J))[.]\\s\\b)");
Pattern p6=Pattern.compile("(BENCH:)((.|\\n)*)(BENCH)((.|\\n)*)(CITATION)");
File[] listfiles=dir.listFiles();
for(File file:listfiles)
{
if(file.isFile())
{
String str="";
String line="";
BufferedReader br=new BufferedReader(new FileReader(file));
while((line=br.readLine())!=null)
{
str+=line+"\n";
}
Matcher match=p.matcher(str);
Matcher match1=p1.matcher(str);
Matcher match2=p2.matcher(str);
Matcher match3=p3.matcher(str);
Matcher match4=p4.matcher(str);
Matcher match5=p5.matcher(str);
Matcher match6=p6.matcher(str);
if(match.find())
{
if(match1.find())
{
list.add(file.toString()+"\t"+match.group(2)+"\t"+match1.group(2)); //filename, judgename ,authorname
System.out.println(match1.group(2));
}
else
{
list.add(file.toString()+"\t"+match.group(2)+"\t"+" ");
System.out.println(match.group(2));
}
}
else if(match1.find())
{
list.add(file.toString()+"\t"+" "+"\t"+match1.group(2));
}
else if(match2.find())
{
list.add(file.toString()+"\t"+match2.group()+"\t"+" ");
}
else if(match3.find())
{
list.add(file.toString()+"\t"+match3.group()+"\t"+" ");
}
else if(match4.find())
{
//do nothing
}
else if(match5.find())
{
list.add(file.toString()+"\t"+match5.group()+"\t"+" ");
System.out.println(file.toString());
}
else if(match6.find())
{
System.out.println("lalalalal");
}
else
{
misclist.add(file.toString()); //list of documents which have no Judgenames
String name = UUID.randomUUID().toString();
PrintWriter pw=new PrintWriter("/home/gauge/Documents/Docs/Misc"+"/"+name);
pw.write(str);
pw.flush();
}
}
else if(file.isDirectory())
{
readFilesFromDirectory(file.getAbsoluteFile());
System.out.println("recursion");
}
}
}
catch(StackOverflowError soe)
{
soe.printStackTrace();
System.err.print(soe);
}
catch (Exception e)
{
e.printStackTrace();
System.err.print(e);
}
}
}
when i remove pattern p6, it doesn't show any error.
The stackTrace is as follows:
at java.util.regex.Pattern$GroupTail.match(Pattern.java:4717)
at java.util.regex.Pattern$BranchConn.match(Pattern.java:4568)
at java.util.regex.Pattern$CharProperty.match(Pattern.java:3777)
at java.util.regex.Pattern$Branch.match(Pattern.java:4604)
at java.util.regex.Pattern$GroupHead.match(Pattern.java:4658)
at java.util.regex.Pattern$Loop.match(Pattern.java:4785)
at java.util.regex.Pattern$GroupTail.match(Pattern.java:4717)
at java.util.regex.Pattern$BranchConn.match(Pattern.java:4568)
at java.util.regex.Pattern$CharProperty.match(Pattern.java:3777)
at java.util.regex.Pattern$Branch.match(Pattern.java:4604)
at java.util.regex.Pattern$GroupHead.match(Pattern.java:4658)
at java.util.regex.Pattern$Loop.match(Pattern.java:4785)
at java.util.regex.Pattern$GroupTail.match(Pattern.java:4717)
at java.util.regex.Pattern$BranchConn.match(Pattern.java:4568)
at java.util.regex.Pattern$CharProperty.match(Pattern.java:3777)
at java.util.regex.Pattern$Branch.match(Pattern.java:4604)
at java.util.regex.Pattern$GroupHead.match(Pattern.java:4658)
at java.util.regex.Pattern$Loop.match(Pattern.java:4785)
at java.util.regex.Pattern$GroupTail.match(Pattern.java:4717)
at java.util.regex.Pattern$BranchConn.match(Pattern.java:4568)
at java.util.regex.Pattern$CharProperty.match(Pattern.java:3777)
at java.util.regex.Pattern$Branch.match(Pattern.java:4604)
at java.util.regex.Pattern$GroupHead.match(Pattern.java:4658)
at java.util.regex.Pattern$Loop.match(Pattern.java:4785)
at java.util.regex.Pattern$GroupTail.match(Pattern.java:4717)
at java.util.regex.Pattern$BranchConn.match(Pattern.java:4568)
at java.util.regex.Pattern$CharProperty.match(Pattern.java:3777)
at java.util.regex.Pattern$Branch.match(Pattern.java:4604)
at java.util.regex.Pattern$GroupHead.match(Pattern.java:4658)
at java.util.regex.Pattern$Loop.match(Pattern.java:4785)
at java.util.regex.Pattern$GroupTail.match(Pattern.java:4717)
at java.util.regex.Pattern$BranchConn.match(Pattern.java:4568)
at java.util.regex.Pattern$CharProperty.match(Pattern.java:3777)
at java.util.regex.Pattern$Branch.match(Pattern.java:4604)
at java.util.regex.Pattern$GroupHead.match(Pattern.java:4658)
at java.util.regex.Pattern$Loop.match(Pattern.java:4785)
at java.util.regex.Pattern$GroupTail.match(Pattern.java:4717)
at java.util.regex.Pattern$BranchConn.match(Pattern.java:4568)
at java.util.regex.Pattern$CharProperty.match(Pattern.java:3777)
at java.util.regex.Pattern$Branch.match(Pattern.java:4604)
at java.util.regex.Pattern$GroupHead.match(Pattern.java:4658)
at java.util.regex.Pattern$Loop.match(Pattern.java:4785)
at java.util.regex.Pattern$GroupTail.match(Pattern.java:4717)
at java.util.regex.Pattern$BranchConn.match(Pattern.java:4568)
at java.util.regex.Pattern$CharProperty.match(Pattern.java:3777)
at java.util.regex.Pattern$Branch.match(Pattern.java:4604)
at java.util.regex.Pattern$GroupHead.match(Pattern.java:4658)
at java.util.regex.Pattern$Loop.match(Pattern.java:4785)
at java.util.regex.Pattern$GroupTail.match(Pattern.java:4717)
at java.util.regex.Pattern$BranchConn.match(Pattern.java:4568)
at java.util.regex.Pattern$CharProperty.match(Pattern.java:3777)
at java.util.regex.Pattern$Branch.match(Pattern.java:4604)
at java.util.regex.Pattern$GroupHead.match(Pattern.java:4658)
at java.util.regex.Pattern$Loop.match(Pattern.java:4785)
at java.util.regex.Pattern$GroupTail.match(Pattern.java:4717)
at java.util.regex.Pattern$BranchConn.match(Pattern.java:4568)
at java.util.regex.Pattern$CharProperty.match(Pattern.java:3777)
at java.util.regex.Pattern$Branch.match(Pattern.java:4604)
at java.util.regex.Pattern$GroupHead.match(Pattern.java:4658)
at java.util.regex.Pattern$Loop.match(Pattern.java:4785)
at java.util.regex.Pattern$GroupTail.match(Pattern.java:4717)
at java.util.regex.Pattern$BranchConn.match(Pattern.java:4568)
at java.util.regex.Pattern$CharProperty.match(Pattern.java:3777)
at java.util.regex.Pattern$Branch.match(Pattern.java:4604)
at java.util.regex.Pattern$GroupHead.match(Pattern.java:4658)
at java.util.regex.Pattern$Loop.match(Pattern.java:4785)
at java.util.regex.Pattern$GroupTail.match(Pattern.java:4717)
at java.util.regex.Pattern$BranchConn.match(Pattern.java:4568)
at java.util.regex.Pattern$CharProperty.match(Pattern.java:3777)
at java.util.regex.Pattern$Branch.match(Pattern.java:4604)
java.lang.StackOverflowError