java处理重复电话号码文件(修改版)

在网上看到了一个小程序,修改了其中的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(405400);

        
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(
00400280);

        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

        String strFileOpen 
= "";

        String lineStr 
= null;

        StringBuffer sbf 
= new StringBuffer();

        StringBuffer bf2 
= new StringBuffer();

        String[] stringArr 
= null;

        
// jFileChooser1 =new JFileChooser();

        
try {

            
if (JFileChooser.APPROVE_OPTION == this.jFileChooser1
                    .showOpenDialog(
this)) {

                strFileOpen 
= this.jFileChooser1.getSelectedFile().getPath();

                
this.setTitle(strFileOpen);
                
long stime = System.currentTimeMillis();
                
try {

                    File files 
= new File(strFileOpen.toString());

                    vectors.removeAllElements();

                    InputStreamReader read 
= new InputStreamReader(
                            
new FileInputStream(files), "gb2312");

                    
// BufferedReader br=new BufferedReader(new
                    
// FileReader(filepath.toString()));

                    BufferedReader br 
= new BufferedReader(read);

                    
while ((lineStr = br.readLine()) != null{

                        
// returnStr=returnStr+line+" ";

                        
// line=br.readLine();

                        
// 处理字符并添加到向量中
                        if (lineStr.trim().equals(""))// 去掉回车和空格
                            continue;
                        
else
                            vectors.add(
new String(lineStr).trim());

                        
// sbf.append(" ");

                    }


                    read.close();
                    br.close();

                    stringArr 
= new String[vectors.size()];

                    resultArr 
= new String[vectors.size()];

                    vectors.copyInto(stringArr);

                    Arrays.sort(stringArr);
// 关键

                    
int startIndex = 1;

                    resultArr[
0= stringArr[0];
                    sbf.append(resultArr[
0+ " ");
                    
// System.out.println(resultArr[0]+":"+intArr[0]);

                    
for (int j = 1; j < stringArr.length; j++{
                        
// System.out.println(resultArr[startIndex-1]+":"+intArr[j]);

                        
if (resultArr[startIndex - 1].equals(stringArr[j])) {

                            bf2.append(stringArr[j] 
+ " ");

                        }


                        
else {

                            sbf.append(stringArr[j] 
+ " ");

                            resultArr[startIndex] 
= stringArr[j];

                            startIndex
++;

                        }


                        
// startIndex++;

                    }

                    PrintWriter output 
= null;
                    String newfile 
= strFileOpen.substring(0, strFileOpen
                            .lastIndexOf(
"."))
                            
+ "new"
                            
+ strFileOpen.substring(strFileOpen
                                    .lastIndexOf(
"."));
                    output 
= new PrintWriter(newfile);

                    
for (int i = 0; i < resultArr.length; i++{
                        
if (resultArr[i] != null{

                            output.write(resultArr[i] 
+ " ");

                        }


                    }

                    output.close();
                    System.out.println(
"耗时:"
                            
+ (System.currentTimeMillis() - stime) + "毫秒");

                    
// jTextArea1.setText("处理后的结果为: " + sbf.toString());

                    jTextArea2.setText(
"处理后无重复文件保存到: " + newfile);

                }


                
catch (IOException e) {

                    System.out.println(
"file open error" + e.getMessage());

                }


                
// this.statubar.setText("Open File:"+this.filename);

            }


            
else

            
{

                
return;

            }


        }


        
catch (Exception e) {

            
// this.statubar.setText("Error Open:"+e.getMessage());

        }


    }
// GEN-LAST:event_openMenuItemActionPerformed

    
private void saveMenuItemActionPerformed(java.awt.event.ActionEvent evt) {// GEN-FIRST:event_openMenuItemActionPerformed

        File fileName 
= null;

        String strFileOpen 
= null;

        PrintWriter output 
= null;

        
try {

            
if (JFileChooser.APPROVE_OPTION == this.jFileChooser1
                    .showSaveDialog(
this)) {

                strFileOpen 
= this.jFileChooser1.getSelectedFile().getPath();

                
this.setTitle(strFileOpen);

                fileName 
= jFileChooser1.getSelectedFile();

                
this.setTitle("保存至:" + fileName.getName());

                
try {

                    output 
= new PrintWriter(fileName);

                    
for (int i = 0; i < resultArr.length; i++{
                        
if (resultArr[i] != null{

                            output.write(resultArr[i] 
+ " ");

                        }


                    }


                    jTextArea1.setText(
"成功保存至: " + strFileOpen);

                }


                
catch (IOException e) {

                }


                
finally {

                    output.close();

                    output 
= null;

                }


            }


        }


        
catch (Exception e) {

        }


    }
// GEN-LAST:event_openMenuItemActionPerformed

    
private void fileMenuActionPerformed(java.awt.event.ActionEvent evt) {// GEN-FIRST:event_fileMenuActionPerformed

        
// TODO 将在此处添加您的处理代码:

    }
// GEN-LAST:event_fileMenuActionPerformed

    
private void exitMenuItemActionPerformed(java.awt.event.ActionEvent evt) {// GEN-FIRST:event_exitMenuItemActionPerformed

        System.exit(
0);

    }
// GEN-LAST:event_exitMenuItemActionPerformed

    
// 交换位置

    
private void swap(int loc1, int loc2) {

        Object tmp 
= vectors.elementAt(loc1);

        vectors.setElementAt(vectors.elementAt(loc2), loc1);

        vectors.setElementAt(tmp, loc2);

    }


    
/**
     * 
     * 
@param args
     *            the command line arguments
     * 
     
*/


    
public static void main(String args[]) {

        java.awt.EventQueue.invokeLater(
new Runnable() {

            
public void run() {

                
new Main().setVisible(true);

            }


        }
);

    }


    
private javax.swing.JFileChooser jFileChooser1;

    
// 变量声明 - 不进行修改//GEN-BEGIN:variables

    
protected javax.swing.JMenuItem aboutMenuItem;

    
protected javax.swing.JMenuItem contentMenuItem;

    
protected javax.swing.JMenuItem copyMenuItem;

    
protected javax.swing.JMenuItem cutMenuItem;

    
protected javax.swing.JMenuItem deleteMenuItem;

    
protected javax.swing.JDesktopPane desktopPane;

    
protected javax.swing.JMenu editMenu;

    
protected javax.swing.JMenuItem exitMenuItem;

    
protected javax.swing.JMenu fileMenu;

    
protected javax.swing.JMenu helpMenu;

    
protected javax.swing.JPanel jPanel1;

    
protected javax.swing.JScrollPane jScrollPane1;

    
protected javax.swing.JScrollPane jScrollPane2;

    
protected javax.swing.JTextArea jTextArea1;

    
protected javax.swing.JTextArea jTextArea2;

    
protected javax.swing.JMenuBar menuBar;

    
protected javax.swing.JMenuItem openMenuItem;

    
protected javax.swing.JMenuItem pasteMenuItem;

    
protected javax.swing.JMenuItem saveAsMenuItem;

    
protected javax.swing.JMenuItem saveMenuItem;

    
// 变量声明结束//GEN-END:variables

}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值