字符串比较这么慢吗?(java编程) 我用jxl.jar包,提取了2个excel表的内容(2个字符串)比较。以一个为准,然后用for循环去另外一个表中取数据,然后用字符串的equals函数比较,结果200多个数据 比较了十几秒才出现结果!!!这个是电脑问题呢?还是我的程序写法问题? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 你想干啥?直接读取后equal不行吗? 这种Excel 表格数据比较。 你200多个数据只需要比较200多次 就够了。因为你不会让Excel中2 个不相关的Cell进行比较,这是一种没意义的事情。你速度很慢,可能真的如2楼所说你比较了4万多次 就是2个excel表格里面的数据取出来对比后,把相应的数据再加到另外一张excel表上面去 import java.io.*;import jxl.*;import jxl.read.biff.BiffException;import jxl.write.*;import jxl.write.biff.RowsExceededException;public class ceshi { public static void main(String args[]) { try { Cell[] cell =new Cell[259]; String result; Workbook book = Workbook.getWorkbook(new File("book1.xls" )); // 获得第一个工作表对象 Sheet sheet = book.getSheet(0); // 得到第一列第一行的单元格 for(int i=1;i<259;i++) { cell[i] = sheet.getCell(1, i); result = cell[i].getContents(); if(result.equals(bijiao1(2))){ write11(result); System.out.println(result); } } //write11(result); book.close(); } catch (Exception e) { System.out.println(e); } } public static String bijiao1(int i ){ Workbook book = null; try { book = Workbook.getWorkbook(new File("结果.xls" )); } catch (BiffException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } // 获得第一个工作表对象 Sheet sheet = book.getSheet(0); // 得到第一列第一行的单元格 Cell cell1 = sheet.getCell(0, i); String result = cell1.getContents(); return result; } public static void write11(String a){ try { //Excel获得文件 Workbook wb=Workbook.getWorkbook(new File("结果.xls")); //打开一个文件的副本,并且指定数据写回到原文件 WritableWorkbook book= Workbook.createWorkbook(new File("结果.xls"),wb); //添加一个工作表 WritableSheet sheet=book.getSheet(0); sheet.addCell(new Label(9,1,a)); book.write(); book.close(); }catch(Exception e) { System.out.println(e); } }} 我的代码:import java.io.*;import jxl.*;import jxl.read.biff.BiffException;import jxl.write.*;import jxl.write.biff.RowsExceededException;public class ceshi { public static void main(String args[]) { try { Cell[] cell =new Cell[259]; String result; Workbook book = Workbook.getWorkbook(new File("book1.xls" )); // 获得第一个工作表对象 Sheet sheet = book.getSheet(0); // 得到第一列第一行的单元格 for(int i=1;i<259;i++) { cell[i] = sheet.getCell(1, i); result = cell[i].getContents(); if(result.equals(bijiao1(2))){ write11(result); System.out.println(result); } } //write11(result); book.close(); } catch (Exception e) { System.out.println(e); } } public static String bijiao1(int i ){ Workbook book = null; try { book = Workbook.getWorkbook(new File("结果.xls" )); } catch (BiffException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } // 获得第一个工作表对象 Sheet sheet = book.getSheet(0); // 得到第一列第一行的单元格 Cell cell1 = sheet.getCell(0, i); String result = cell1.getContents(); return result; } public static void write11(String a){ try { //Excel获得文件 Workbook wb=Workbook.getWorkbook(new File("结果.xls")); //打开一个文件的副本,并且指定数据写回到原文件 WritableWorkbook book= Workbook.createWorkbook(new File("结果.xls"),wb); //添加一个工作表 WritableSheet sheet=book.getSheet(0); sheet.addCell(new Label(9,1,a)); book.write(); book.close(); }catch(Exception e) { System.out.println(e); } }} Workbook wb=Workbook.getWorkbook(new File("1.xls")); 第一次读取,然后存储到aWorkbook wb=Workbook.getWorkbook(new File("2.xls")); 第二次读取,然后存储到b比较a,b 不是字符串比较慢,而是读写文件慢你的代码每循环一次,执行write11()一次write11()需要打开文件,写文件关闭文件磁盘IO向来是速度的瓶颈你最好把结果先保存在一个数组里,最后一次写入文件 哦这样,那bijiao1()循环了200多次,bijiao1居然也每次都执行一次完整的文件操作你一次性把需要被比较的读入一个数组吧,不要这么反复地打开文件 如果是 对应单元格比较 就按11#的 一次加载2个XLS 文件 然后 循环比较 对应的单元格 equals如果说是 只要 XLS2 中有跟 XLS1中相同的内容 不论单元格位置是不是相同 都要作为结果取出的话你可以试试这种方法加载 xls1 遍历存入 map<String,Integer> 中 key 为 xls1中的 字符串 value 初始为0然后 加载 xls2 遍历 xls2 然后 if(map.get(xls2.value)==0) map.put(xls2.value,map.get(xls2.value)+1)最后 把所有 值不等于0的 key 输出到 结果文件中 Sheet sheet = book.getSheet(0);String[] a = new String[259];List<String> b = new ArrayList<String>();// 得到第一列第一行的单元格for(int i=1;i<259;i++){ cell[i] = sheet.getCell(1, i); a[i] = cell[i].getContents();}for(int i=1;i<259;i++){ cell[i] = sheet.getCell(1, i); if(a[i] != null && a[i].equals(cell[i].getContents())) { //数据相同 b.add(a[i]); }}//然后处理b中的数据 把两个excel要比的数据全部读出来放到内存里,然后再比较,excel的IO操作本来就很慢 五子棋项目 重绘不出来 正则表达式(替换问题) 初学JAva,编了一个小程序,请问牛人,那里错了? 数据库读不出数据,在线等待,谢谢!! java程序异常造成window系统重启 刚刚开始学JAVA,一个小问题,请大家帮忙看一下! 在程序中如何保证只有一个connection呢? 如何导入第三方的.class文件?? 好困惑》!这样的(JB) UI设计器?! 了解一下行情,在北京用JAVA做数据库,一般多少钱?(来者有分) 对整型数组由小到大进行排序,书上的代码看不懂55555 java swing让JPanel的图片自动缩放
你速度很慢,可能真的如2楼所说你比较了4万多次
import jxl.read.biff.BiffException;
import jxl.write.*;
import jxl.write.biff.RowsExceededException;public class ceshi {
public static void main(String args[]) {
try {
Cell[] cell =new Cell[259];
String result;
Workbook book = Workbook.getWorkbook(new File("book1.xls" ));
// 获得第一个工作表对象
Sheet sheet = book.getSheet(0);
// 得到第一列第一行的单元格
for(int i=1;i<259;i++)
{
cell[i] = sheet.getCell(1, i);
result = cell[i].getContents();
if(result.equals(bijiao1(2))){
write11(result);
System.out.println(result);
}
}
//write11(result);
book.close();
} catch (Exception e) {
System.out.println(e);
}
}
public static String bijiao1(int i ){
Workbook book = null;
try {
book = Workbook.getWorkbook(new File("结果.xls" ));
} catch (BiffException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// 获得第一个工作表对象
Sheet sheet = book.getSheet(0);
// 得到第一列第一行的单元格
Cell cell1 = sheet.getCell(0, i);
String result = cell1.getContents();
return result;
}
public static void write11(String a){
try
{
//Excel获得文件
Workbook wb=Workbook.getWorkbook(new File("结果.xls"));
//打开一个文件的副本,并且指定数据写回到原文件
WritableWorkbook book=
Workbook.createWorkbook(new File("结果.xls"),wb);
//添加一个工作表
WritableSheet sheet=book.getSheet(0);
sheet.addCell(new Label(9,1,a));
book.write();
book.close();
}catch(Exception e)
{
System.out.println(e);
}
}
}
import java.io.*;import jxl.*;
import jxl.read.biff.BiffException;
import jxl.write.*;
import jxl.write.biff.RowsExceededException;public class ceshi {
public static void main(String args[]) {
try {
Cell[] cell =new Cell[259];
String result;
Workbook book = Workbook.getWorkbook(new File("book1.xls" ));
// 获得第一个工作表对象
Sheet sheet = book.getSheet(0);
// 得到第一列第一行的单元格
for(int i=1;i<259;i++)
{
cell[i] = sheet.getCell(1, i);
result = cell[i].getContents();
if(result.equals(bijiao1(2))){
write11(result);
System.out.println(result);
}
}
//write11(result);
book.close();
} catch (Exception e) {
System.out.println(e);
}
}
public static String bijiao1(int i ){
Workbook book = null;
try {
book = Workbook.getWorkbook(new File("结果.xls" ));
} catch (BiffException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// 获得第一个工作表对象
Sheet sheet = book.getSheet(0);
// 得到第一列第一行的单元格
Cell cell1 = sheet.getCell(0, i);
String result = cell1.getContents();
return result;
}
public static void write11(String a){
try
{
//Excel获得文件
Workbook wb=Workbook.getWorkbook(new File("结果.xls"));
//打开一个文件的副本,并且指定数据写回到原文件
WritableWorkbook book=
Workbook.createWorkbook(new File("结果.xls"),wb);
//添加一个工作表
WritableSheet sheet=book.getSheet(0);
sheet.addCell(new Label(9,1,a));
book.write();
book.close();
}catch(Exception e)
{
System.out.println(e);
}
}
}
Workbook wb=Workbook.getWorkbook(new File("2.xls")); 第二次读取,然后存储到b
比较a,b
你的代码每循环一次,执行write11()一次
write11()需要打开文件,写文件关闭文件
磁盘IO向来是速度的瓶颈
你最好把结果先保存在一个数组里,最后一次写入文件
哦这样,那bijiao1()循环了200多次,bijiao1居然也每次都执行一次完整的文件操作
你一次性把需要被比较的读入一个数组吧,不要这么反复地打开文件
Sheet sheet = book.getSheet(0);
String[] a = new String[259];
List<String> b = new ArrayList<String>();
// 得到第一列第一行的单元格
for(int i=1;i<259;i++)
{
cell[i] = sheet.getCell(1, i);
a[i] = cell[i].getContents();
}for(int i=1;i<259;i++)
{
cell[i] = sheet.getCell(1, i);
if(a[i] != null && a[i].equals(cell[i].getContents())) {
//数据相同
b.add(a[i]);
}
}//然后处理b中的数据