package Test;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Replace {
@SuppressWarnings("rawtypes")
public Map<String, List> allNotes = new HashMap<String, List>();
List<Notes> eveNote = new ArrayList<Notes>();
public StringBuilder getTxt(String path) throws IOException {
Scanner s = new Scanner(new File(path),"UTF-8");
StringBuilder sb = new StringBuilder();
while (s.hasNextLine()) {
sb.append(s.nextLine());
}
s.close();
return sb;
}
public void splitTxt(String txt) {
String[] content = txt.split("==========");
Pattern p = Pattern
.compile("(?<name>.*?- ).*? \\| 添加于 (?<date>.*\\d:\\d{2})(?<content>.*)");
Matcher m;
Notes note = new Notes();
String name = "";
String temp;
for (int i = 0; i < content.length; i++) {
temp = content[i];
m = p.matcher(temp);
while (m.find()) {
name = m.group("name");
if(name.length() >= 30)
name = name.substring(0,30);
if (name.contains("?")) {
name = name.substring(1, name.length() - 2);
note.setName(name);
} else {
name = name.substring(0, name.length() - 2);
note.setName(name);
}
note.setDate(m.group("date"));
note.setContent(m.group("content"));
}
if (allNotes.containsKey(name)) {
allNotes.get(name).add(note);
} else {
eveNote = new ArrayList<Notes>();
eveNote.add(note);
allNotes.put(name, eveNote);
}
note = new Notes();
}
}
}
package Test;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.Map.Entry;
import javax.swing.*;
import javax.swing.border.EmptyBorder;
import javax.swing.border.TitledBorder;
import com.sun.star.ucb.ContentEvent;
public class ClipFrame extends JFrame implements ItemListener, ActionListener {
Replace replace = new Replace();
JTextField field;
JComboBox<String> names;
JButton submit;
JButton export;
JTextArea content;
public ClipFrame() throws IOException {
init();
}
public void init() {
this.setTitle("笔记整理器");
this.setSize(1000, 600);
this.setLocationRelativeTo(null);
this.setContentPane(createMainPane());
}
public JPanel createMainPane() {
JPanel panel = new JPanel(new BorderLayout());
JPanel panel2 = new JPanel(new FlowLayout());
panel.setBorder(new EmptyBorder(6, 6, 6, 6));
JLabel tips = new JLabel("输入笔记所在磁盘:");
field = new JTextField(10);
names = new JComboBox();
export = new JButton("导出笔记");
submit = new JButton("生成笔记");
JLabel label = new JLabel("请选择书名:");
panel2.add(tips);
panel2.add(field);
panel2.add(submit);
panel2.add(label);
panel2.add(names);
panel2.add(export);
panel.add(panel2, BorderLayout.NORTH);
panel.add(createContentPane(), BorderLayout.CENTER);
submit.addActionListener(this);
export.addActionListener(this);
return panel;
}
public JPanel createContentPane() {
JPanel panel = new JPanel(new BorderLayout());
panel.setBorder(new TitledBorder("整理后的笔记"));
content = new JTextArea();
content.setBackground(new Color(212, 255, 170));
content.setLineWrap(true);
content.setEditable(false);
content.setFont(new Font("楷体", Font.BOLD, 20));
JScrollPane jp = new JScrollPane(content);
panel.add(jp, BorderLayout.CENTER);
return panel;
}
@Override
public void itemStateChanged(ItemEvent e) {
String name;
if (e.getStateChange() == ItemEvent.SELECTED) {
name = (String) names.getSelectedItem();
List list = new ArrayList<Notes>();
Set entries = replace.allNotes.entrySet();
Iterator iterator = entries.iterator();
while (iterator.hasNext()) {
Map.Entry entry = (Entry) iterator.next();
if (name.equals(entry.getKey().toString())) {
list = (List) entry.getValue();
Notes n;
StringBuilder sb = new StringBuilder();
for (int i = 0; i < list.size(); i++) {
n = (Notes) list.get(i);
if (n.getContent().equals(""))
continue;
sb.append("笔记" + (i + 1) + "\t" + n.getContent()
+ "\n\n");
}
content.setText(sb.toString());
content.setCaretPosition(0);
}
}
}
}
@Override
public void actionPerformed(ActionEvent e) {
if(e.getSource()==submit){
try {
replace.splitTxt(replace.getTxt(field.getText() + "://My Clippings.txt")
.toString());
} catch (IOException ce) {
JOptionPane.showConfirmDialog(null, "未找到文件,请重新输入盘符", "提示",
JOptionPane.WARNING_MESSAGE);
field.setText("");
}
String[] title = new String[replace.allNotes.size()];
List list = new ArrayList<Notes>();
Set entries = replace.allNotes.entrySet();
Iterator iterator = entries.iterator();
int k = 0;
while (iterator.hasNext()) {
Map.Entry entry = (Entry) iterator.next();
title[k] = entry.getKey().toString();
k++;
}
for (String temp : title) {
names.addItem(temp);
}
names.addItemListener(this);
names.setEnabled(true);}
else if(e.getSource()==export){
exportClipping((String) names.getSelectedItem(), content.getText());
}
}
public void exportClipping(String name, String content){
try {
BufferedWriter bw = new BufferedWriter(new FileWriter("D://" + name+ ".txt"));
String[] notes = content.split("\n\n");
for(String temp: notes)
bw.append(temp + "\r\n\r\n");
bw.close();
} catch (IOException e) {
e.printStackTrace();
}
JOptionPane.showConfirmDialog(null, "导出完成", "提示",
JOptionPane.WARNING_MESSAGE);
}
public static void main(String[] args) throws IOException {
ClipFrame cf = new ClipFrame();
cf.setVisible(true);
}
}