在网上看到了一个小程序,修改了其中的bug(主要是没有关闭一些InputStreamReader之类的东西)
修改为可以查找重复字符串,不仅仅是手机号.测试了一个文件,50万条带重复字符串的文件(每行一串字符,是移动的号段表)耗时 2515毫秒,实际效率应该比这个低,因为号段已经排过序了.
代码如下:
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.util.Arrays;
import java.util.Vector;
import javax.swing.JFileChooser;
import javax.swing.JOptionPane;
/** *//**
*
*
*
* @author
* @modify hallywang 2006-11-18
*
*/
public class Main extends javax.swing.JFrame ...{
/** *//**
*
*/
private static final long serialVersionUID = 1L;
private Vector vectors = new Vector();
String[] resultArr = null;
/** *//** Creates new form Main */
public Main() ...{
initComponents();
this.setSize(405, 400);
this.setTitle("电话号码查询");
this.setResizable(false);
}
/** *//**
* This method is called from within the constructor to
*
* initialize the form.
*
* WARNING: Do NOT modify this code. The content of this method is
*
* always regenerated by the Form Editor.
*
*/
// //GEN-BEGIN:initComponents
private void initComponents() ...{
jFileChooser1 = new JFileChooser();
desktopPane = new javax.swing.JDesktopPane();
jPanel1 = new javax.swing.JPanel();
jScrollPane1 = new javax.swing.JScrollPane();
jScrollPane2 = new javax.swing.JScrollPane();
jTextArea1 = new javax.swing.JTextArea();
jTextArea2 = new javax.swing.JTextArea();
menuBar = new javax.swing.JMenuBar();
fileMenu = new javax.swing.JMenu();
openMenuItem = new javax.swing.JMenuItem();
saveMenuItem = new javax.swing.JMenuItem();
saveAsMenuItem = new javax.swing.JMenuItem();
exitMenuItem = new javax.swing.JMenuItem();
editMenu = new javax.swing.JMenu();
cutMenuItem = new javax.swing.JMenuItem();
copyMenuItem = new javax.swing.JMenuItem();
pasteMenuItem = new javax.swing.JMenuItem();
deleteMenuItem = new javax.swing.JMenuItem();
helpMenu = new javax.swing.JMenu();
contentMenuItem = new javax.swing.JMenuItem();
aboutMenuItem = new javax.swing.JMenuItem();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
jPanel1.setLayout(new java.awt.BorderLayout());
jTextArea1.setColumns(35);
jTextArea1.setRows(15);
jTextArea1.setTabSize(4);
jScrollPane1.setViewportView(jTextArea1);
jPanel1.add(jScrollPane1, java.awt.BorderLayout.CENTER);
jTextArea2.setColumns(35);
jTextArea2.setRows(5);
jScrollPane2.setViewportView(jTextArea2);
jPanel1.add(jScrollPane2, java.awt.BorderLayout.SOUTH);
jPanel1.setBounds(0, 0, 400, 280);
desktopPane.add(jPanel1, javax.swing.JLayeredPane.DEFAULT_LAYER);
getContentPane().add(desktopPane, java.awt.BorderLayout.CENTER);
fileMenu.setText("文件");
fileMenu.addActionListener(new java.awt.event.ActionListener() ...{
public void actionPerformed(java.awt.event.ActionEvent evt) ...{
fileMenuActionPerformed(evt);
}
});
openMenuItem.setText("打开");
openMenuItem.addActionListener(new java.awt.event.ActionListener() ...{
public void actionPerformed(java.awt.event.ActionEvent evt) ...{
openMenuItemActionPerformed(evt);
}
});
fileMenu.add(openMenuItem);
saveMenuItem.setText("保存");
saveMenuItem.addActionListener(new java.awt.event.ActionListener() ...{
public void actionPerformed(java.awt.event.ActionEvent evt) ...{
saveMenuItemActionPerformed(evt);
}
});
fileMenu.add(saveMenuItem);
// saveAsMenuItem.setText("Save As ...");
// fileMenu.add(saveAsMenuItem);
exitMenuItem.setText("Exit");
exitMenuItem.addActionListener(new java.awt.event.ActionListener() ...{
public void actionPerformed(java.awt.event.ActionEvent evt) ...{
exitMenuItemActionPerformed(evt);
}
});
fileMenu.add(exitMenuItem);
menuBar.add(fileMenu);
editMenu.setText("Edit");
cutMenuItem.setText("Cut");
editMenu.add(cutMenuItem);
copyMenuItem.setText("Copy");
editMenu.add(copyMenuItem);
pasteMenuItem.setText("Paste");
editMenu.add(pasteMenuItem);
deleteMenuItem.setText("Delete");
editMenu.add(deleteMenuItem);
menuBar.add(editMenu);
helpMenu.setText("Help");
contentMenuItem.setText("Contents");
helpMenu.add(contentMenuItem);
aboutMenuItem.setText("About");
aboutMenuItem.addActionListener(new java.awt.event.ActionListener() ...{
public void actionPerformed(java.awt.event.ActionEvent evt) ...{
aboutMenuItemActionPerformed(evt);
}
});
helpMenu.add(aboutMenuItem);
menuBar.add(helpMenu);
setJMenuBar(menuBar);
pack();
}
// //GEN-END:initComponents
private void aboutMenuItemActionPerformed(java.awt.event.ActionEvent evt) ...{// GEN-FIRST:event_aboutMenuItemActionPerformed
// TODO 将在此处添加您的处理代码:
JOptionPane.showMessageDialog(null, "Find Phone Num by repeated.",
"关于", JOptionPane.WARNING_MESSAGE);
}// GEN-LAST:event_aboutMenuItemActionPerformed
private void openMenuItemActionPerformed(java.awt.event.ActionEvent evt) ...{// GEN-FIRST:event_openMenuItemActionPerformed
<
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.util.Arrays;
import java.util.Vector;
import javax.swing.JFileChooser;
import javax.swing.JOptionPane;
/** *//**
*
*
*
* @author
* @modify hallywang 2006-11-18
*
*/
public class Main extends javax.swing.JFrame ...{
/** *//**
*
*/
private static final long serialVersionUID = 1L;
private Vector vectors = new Vector();
String[] resultArr = null;
/** *//** Creates new form Main */
public Main() ...{
initComponents();
this.setSize(405, 400);
this.setTitle("电话号码查询");
this.setResizable(false);
}
/** *//**
* This method is called from within the constructor to
*
* initialize the form.
*
* WARNING: Do NOT modify this code. The content of this method is
*
* always regenerated by the Form Editor.
*
*/
// //GEN-BEGIN:initComponents
private void initComponents() ...{
jFileChooser1 = new JFileChooser();
desktopPane = new javax.swing.JDesktopPane();
jPanel1 = new javax.swing.JPanel();
jScrollPane1 = new javax.swing.JScrollPane();
jScrollPane2 = new javax.swing.JScrollPane();
jTextArea1 = new javax.swing.JTextArea();
jTextArea2 = new javax.swing.JTextArea();
menuBar = new javax.swing.JMenuBar();
fileMenu = new javax.swing.JMenu();
openMenuItem = new javax.swing.JMenuItem();
saveMenuItem = new javax.swing.JMenuItem();
saveAsMenuItem = new javax.swing.JMenuItem();
exitMenuItem = new javax.swing.JMenuItem();
editMenu = new javax.swing.JMenu();
cutMenuItem = new javax.swing.JMenuItem();
copyMenuItem = new javax.swing.JMenuItem();
pasteMenuItem = new javax.swing.JMenuItem();
deleteMenuItem = new javax.swing.JMenuItem();
helpMenu = new javax.swing.JMenu();
contentMenuItem = new javax.swing.JMenuItem();
aboutMenuItem = new javax.swing.JMenuItem();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
jPanel1.setLayout(new java.awt.BorderLayout());
jTextArea1.setColumns(35);
jTextArea1.setRows(15);
jTextArea1.setTabSize(4);
jScrollPane1.setViewportView(jTextArea1);
jPanel1.add(jScrollPane1, java.awt.BorderLayout.CENTER);
jTextArea2.setColumns(35);
jTextArea2.setRows(5);
jScrollPane2.setViewportView(jTextArea2);
jPanel1.add(jScrollPane2, java.awt.BorderLayout.SOUTH);
jPanel1.setBounds(0, 0, 400, 280);
desktopPane.add(jPanel1, javax.swing.JLayeredPane.DEFAULT_LAYER);
getContentPane().add(desktopPane, java.awt.BorderLayout.CENTER);
fileMenu.setText("文件");
fileMenu.addActionListener(new java.awt.event.ActionListener() ...{
public void actionPerformed(java.awt.event.ActionEvent evt) ...{
fileMenuActionPerformed(evt);
}
});
openMenuItem.setText("打开");
openMenuItem.addActionListener(new java.awt.event.ActionListener() ...{
public void actionPerformed(java.awt.event.ActionEvent evt) ...{
openMenuItemActionPerformed(evt);
}
});
fileMenu.add(openMenuItem);
saveMenuItem.setText("保存");
saveMenuItem.addActionListener(new java.awt.event.ActionListener() ...{
public void actionPerformed(java.awt.event.ActionEvent evt) ...{
saveMenuItemActionPerformed(evt);
}
});
fileMenu.add(saveMenuItem);
// saveAsMenuItem.setText("Save As ...");
// fileMenu.add(saveAsMenuItem);
exitMenuItem.setText("Exit");
exitMenuItem.addActionListener(new java.awt.event.ActionListener() ...{
public void actionPerformed(java.awt.event.ActionEvent evt) ...{
exitMenuItemActionPerformed(evt);
}
});
fileMenu.add(exitMenuItem);
menuBar.add(fileMenu);
editMenu.setText("Edit");
cutMenuItem.setText("Cut");
editMenu.add(cutMenuItem);
copyMenuItem.setText("Copy");
editMenu.add(copyMenuItem);
pasteMenuItem.setText("Paste");
editMenu.add(pasteMenuItem);
deleteMenuItem.setText("Delete");
editMenu.add(deleteMenuItem);
menuBar.add(editMenu);
helpMenu.setText("Help");
contentMenuItem.setText("Contents");
helpMenu.add(contentMenuItem);
aboutMenuItem.setText("About");
aboutMenuItem.addActionListener(new java.awt.event.ActionListener() ...{
public void actionPerformed(java.awt.event.ActionEvent evt) ...{
aboutMenuItemActionPerformed(evt);
}
});
helpMenu.add(aboutMenuItem);
menuBar.add(helpMenu);
setJMenuBar(menuBar);
pack();
}
// //GEN-END:initComponents
private void aboutMenuItemActionPerformed(java.awt.event.ActionEvent evt) ...{// GEN-FIRST:event_aboutMenuItemActionPerformed
// TODO 将在此处添加您的处理代码:
JOptionPane.showMessageDialog(null, "Find Phone Num by repeated.",
"关于", JOptionPane.WARNING_MESSAGE);
}// GEN-LAST:event_aboutMenuItemActionPerformed
private void openMenuItemActionPerformed(java.awt.event.ActionEvent evt) ...{// GEN-FIRST:event_openMenuItemActionPerformed
<