Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/392.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_String_File_Search - Fatal编程技术网

Java 库/文件文本搜索建议/字符串拆分效率/如何使我的代码运行更快

Java 库/文件文本搜索建议/字符串拆分效率/如何使我的代码运行更快,java,string,file,search,Java,String,File,Search,所以,我有一个文本文件,有500000行,每行最多有100个单词,用空格和数字分隔。我从每行中提取每个单词,在我的项目中的其他几个文件(类似于我制作的本地词典)中搜索相应的字符串,这些文件可以有或没有该单词。基本上,输入时我有500k文件,输出时是同一个文件,只有英文单词(如果在另一种语言中找到,则必须翻译)。我的问题是,如何优化代码以更快地运行(目前,处理大约10行代码需要约1分钟30秒,因此理论上,处理整个文件至少需要5天的时间),我必须试着用最多一天的时间。现在,我是如何进行搜索的: Bu

所以,我有一个文本文件,有500000行,每行最多有100个单词,用空格和数字分隔。我从每行中提取每个单词,在我的项目中的其他几个文件(类似于我制作的本地词典)中搜索相应的字符串,这些文件可以有或没有该单词。基本上,输入时我有500k文件,输出时是同一个文件,只有英文单词(如果在另一种语言中找到,则必须翻译)。我的问题是,如何优化代码以更快地运行(目前,处理大约10行代码需要约1分钟30秒,因此理论上,处理整个文件至少需要5天的时间),我必须试着用最多一天的时间。现在,我是如何进行搜索的:

BufferedReader bufin = new BufferedReader(new FileReader("text_to_be_translated.txt"));
FileWriter fout = new FileWriter("Translated.txt", true);

            for (i =0; i < 500000; i++) {

                insertLine = new StringBuilder();
                Line = bufin.readLine();
                String[] array;
                array = Line.split(" ");
                for (String item : array) {
                    if (!isWord(item)) {
                        insertLine.append(item).append(" ");
                    } else {
                        if (isEnglish(item)) {
                            insertLine.append(item).append(" ");
                        } else {
                            check = getTranslate(item);
                            if (!check.equals(item)) {
                                insertLine.append(check).append(" ");
                            } else { insertLine.append(item).append(" ");
                                   }
                        }
                    }

                }

                fout.write(insertLine.toString() + lineSeparator);


            }
             fout.close();
            bufin.close();

首先,正如卡亚曼所说,你应该只打开一次字典

然后,您应该将输入的
text_to_be_translated.txt
按顺序(从A到Z)放入数组中

在那之后,你应该继续分析字典,这样你就只需要在字典中前进,而不必每次都从一开始就分析它(因为输入是有序的,假设字典是有序的)

你能把你的整个“字典”放在地图上吗?还是太大了? 如果它适合地图,你可以在阅读“文本到翻译”之前构建地图。那么,每次访问词典都将是复杂的O(1)(充其量)

Map dictionary=initializeDictionary()
...
...
然后开始翻译:

public static String getTranslate(Map<String, String> dictionary, String wordToSearch) {
    String translation = dictionary.get(wordToSearch);
    if(translation == null){
      return wordToSearch;
    }
return translation;
publicstaticstringgetTranslate(映射字典,stringwordtosearch){
字符串翻译=dictionary.get(wordToSearch);
if(translation==null){
返回wordToSearch;
}
返回翻译;
您的
getTranslate()
每次调用时都会打开并读取文件?我想知道为什么它很慢。
Map<String, String> dictionary = initializeDictionary()
...
...
public static String getTranslate(Map<String, String> dictionary, String wordToSearch) {
    String translation = dictionary.get(wordToSearch);
    if(translation == null){
      return wordToSearch;
    }
return translation;