我寫了一些代碼,這些代碼幾乎就我希望它的功能而言。這種Java代碼的邏輯如下:使用Java將獨特的行寫入文件
- 從指定位置讀取源文件
- 正如我們在閱讀每一行,應用正則表達式來獲取捕獲組的結果(在這種情況下, URL)所有這些行讀
- 後,把URL和行號到HashMap中
- 複製這些值轉換成一個列表,並責令其按行號增加
- 讀取源文件再次
- 對於每個行號m在列表中出動了,寫信給我們的新文件
這裏是代碼:
package preproc;
import java.io.*;
import java.util.*;
import java.util.regex.*;
public class Preproc {
public static void main(String[] args) {
File file = new File("C:\\Users\\AnthonyH\\Desktop\\file.txt");
BufferedReader br;
HashMap<String, Integer> hmap = new HashMap<>();
try {
br = new BufferedReader(new InputStreamReader(new FileInputStream(file)));
int linenumber = 0;
String event;
while ((event = br.readLine()) != null) {
//System.out.println("LINE=" + event);
Pattern regex = Pattern.compile("^.*url=(.*)");
Matcher check = regex.matcher(event);
if (check.find()) {
String match = check.group(1);
//System.out.println("GROUP=" + match + " LINE=" + linenumber);
if (!hmap.containsKey(match)) {
//System.out.println("ADDING TO INDEX");
hmap.put(match, linenumber);
}
}
linenumber++;
}
List<Integer> lineNumbers = new ArrayList<>(hmap.values());
//System.out.println("SIZE=" + lineNumbers.size());
Collections.sort(lineNumbers);
File file2 = new File("C:\\Users\\AnthonyH\\Desktop\\file2.txt");
BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(file)));
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file2)));
int currentLine = 0;
for (Integer line : lineNumbers) {
//System.out.println("LINE=" + line + "CURRENT LINE=" + currentLine);
while (currentLine < line) {
reader.readLine();
currentLine++;
}
writer.write(reader.readLine());
writer.newLine();
currentLine++;
}
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
我現在面臨的問題是,它是寫所有唯一字符串匹配到HashMap中,當我只想添加那些在原始文件中出現過的文件時。 I.E. site1.com的五個實例和site2.com的一個實例,地圖將具有site1.com的第一個實例和site2.com的唯一實例。我只想要site2.com。
非常感謝所有幫助。
你能給我一個這樣的例子嗎?我不熟悉將兩個值設置爲單個鍵值映射 –
最終,這些將是非常大的文件,因此我現在將它保留在內存不足 –
您不設置兩個值。只有一個。這個值是一個名爲Occurrence的類的實例,它有兩個字段:請閱讀https://docs.oracle.com/javase/tutorial/java/javaOO/並嘗試一些內容。在使用Maps和IO之前,您應該掌握類,abjects和字段的概念。 –