チームがウェブログ ファイル全体を配列に解析するためのバックエンド Java プログラムを作成しています。ただし、私のコードはこの巨大なログ ファイルの一部しか取得できず、すべてのレコードは行区切り記号なしで相互に関連付けられています。ソースはネットワーク ドライブにある txt ファイルからのもので、この場合は絶対パスをパラメーターとして設定します。これが私のコードです:
public class ProcessTxt
{
public String[] openFile(String source)
{
List<String> allMatches = new ArrayList<>();
String[] str =new String[]{};
String pattern="^\\d+.\\d+.\\d+.\\d.*\".*?\"$";
Pattern p=Pattern.compile(pattern);
try
{
File sourceFile = new File(source);
// if source is a full path, java will search using that path
// if source is just a name, java will assume its under current working directory
Scanner scanner = new Scanner(sourceFile);
System.out.println(scanner.hasNext()?"true":"false");//debug
while (scanner.hasNextLine())
{
String line=scanner.nextLine();
Matcher m=p.matcher(line);
if (m.matches())
{
allMatches.add(m.group()); // add entire line
}
}
str = allMatches.toArray(new String[0]); // move to array
scanner.close();
}
catch (FileNotFoundException e)
{
e.printStackTrace();
}
return str;
}
public static void main(String[] args)
{
ProcessTxt pTxt=new ProcessTxt();
String[] arr=pTxt.openFile("PATH\FOLDER\weblog.txt");
for(String s: arr)
{
System.out.println(s);
}
}
inputstream は機能しています。正規表現がすべてのレコードをキャッチしているわけではありませんが、http://www.regexplanet.comでさらにテストしたため、コード内の正規表現がその仕事をしています。何か考えはありますか?