Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在java中使用正则表达式组_Java_Regex - Fatal编程技术网

在java中使用正则表达式组

在java中使用正则表达式组,java,regex,Java,Regex,我正在写一个程序,它应该用正则表达式改变文本文件。我有 一些命令,它们在记事本++中工作。现在,我想用java中相同的命令来加快速度。这可能是由于它保存和读取文件的方式造成的吗 private List<String> lines = new ArrayList<String>(10000000); // read original file to an ArrayList public String[] readOriginalFile(String filename

我正在写一个程序,它应该用正则表达式改变文本文件。我有 一些命令,它们在记事本++中工作。现在,我想用java中相同的命令来加快速度。这可能是由于它保存和读取文件的方式造成的吗

private List<String> lines = new ArrayList<String>(10000000);

// read original file to an ArrayList
public String[] readOriginalFile(String filename) throws IOException {
    FileReader fileReader = new FileReader(filename);
    BufferedReader bufferedReader = new BufferedReader(fileReader);
    String line = null;
    while (((line = bufferedReader.readLine()) != null)){
        lines.add(line);
    }
    bufferedReader.close();
    return lines.toArray(new String[lines.size()]);
}

 public void replaceWordsOne() {
    ArrayList<String> lns = new ArrayList<String>(10000000);
    for (String ln : lines) {
        lns.add(ln.replaceAll("^(\\[.*?\\])\\s+(\\[.*?\\])\\s(\\[.*?\\]\\s){1,}(\\[.*?\\])", "\1\t\2\t\4\t"));
    }
    lines.clear();
    lines = lns;
}

public void writeToNewFileOne(String FinalDirectory) throws IOException {
    FileWriter writer = new FileWriter(FinalDirectory);
    for (String str : lines) {
        writer.write(str +"\n");
    }
    writer.close();
}
私有列表行=新的ArrayList(10000000);
//将原始文件读取到ArrayList
公共字符串[]readOriginalFile(字符串文件名)引发IOException{
FileReader FileReader=新的FileReader(文件名);
BufferedReader BufferedReader=新的BufferedReader(文件阅读器);
字符串行=null;
而(((line=bufferedReader.readLine())!=null)){
行。添加(行);
}
bufferedReader.close();
返回lines.toArray(新字符串[lines.size()]);
}
public void replaceWordsOne(){
ArrayList lns=新的ArrayList(10000000);
用于(字符串项次:行){
lns.add(ln.replaceAll(^(\\[.\\\])\\s+(\\[.\\\])\\s(\\[.\\\]\\s){1,}(\\[.\\\]),“\1\t\2\t\4\t”);
}
行。清除();
行=lns;
}
public void writeToNewFileOne(字符串最终目录)引发IOException{
FileWriter writer=新的FileWriter(最终目录);
用于(字符串str:lines){
writer.write(str+“\n”);
}
writer.close();
}

我认为主要原因是这一行:

private List<String> lines = new ArrayList<String>(10000000);
私有列表行=新的ArrayList(10000000);
在java arraylist中,数组是动态调整大小的数组,这意味着不需要使用元素初始化列表

应该是这样的:

private List<String> lines = new ArrayList<String>();
private List line=new ArrayList();

重复使用原始正则表达式会破坏性能。使用一次编译,永远使用。性能在这里并不重要。现在我的印象是,这可能是由于其他原因。我认为正则表达式和组需要完整的文本,而不是单行。如何加载整个文件?您在自己的问题中说过希望它运行得更快,但现在您说性能并不重要?请决定您要做什么,然后重新编写您的问题。Ejava程序可以比我的手动工作更快:)不,这没有什么区别。好的,尝试使用StringBuilder,而不是像这样的字符串列表:StringBuilder lines=new StringBuilder();行。追加(行);//添加新行。参考链接:好的,我看到你使用一个字符串列表,并用正则表达式逐行替换字符,然后将其保存在另一个列表中,我认为代码中可能存在瓶颈,所以当你替换字符时,对整个字符串执行此操作,而不是“逐行”方式。