对JAVA不熟悉,帮忙优化一下下面的程序 本帖最后由 pooq 于 2013-08-02 00:41:31 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 List对象貌似用Iterator要比你的for要快好多的 for(int i=SentenceOfAllDocument.size-1;i>=0;i--){int count=0;for(String str:ConceptFromExcel){if(!SentenceOfAllDocument.getIndex(i).equals(str)){count++;}else{break;}}if(count==ConceptFromExcel.size()){SentenceOfAllDocument.remove(SentenceOfAllDocument.getIndex(i));})}System.out.println(SentenceOfAllDocument);我没有测,大概这思路 public static void simplySentenceOfAllDocument(ArrayList<String> SentenceOfAllDocument, ArrayList<String> ConceptFromExcel) { ArrayList<Integer> IndexOfSentenceOfAllDocument = new ArrayList<Integer>(); System.out.println("countofWordInSentence:初始句子共有 " + SentenceOfAllDocument.size() + "个"); for (int i = 0; i < ConceptFromExcel.size(); i++) { System.out.println(i + "/" + ConceptFromExcel.size()); for (int m = 0; m < SentenceOfAllDocument.size(); m++) { if (!SentenceOfAllDocument.get(m).contains(ConceptFromExcel.get(i))) { //如果句子里面不存在这个词,则将句子的索引放入数组 IndexOfSentenceOfAllDocument.add(m); } else { //句子里面有这个词,则查找这个句子的索引是否在数组中,如果存在,则删除这个索引 Integer temp = m;//转换为Integer判断是否包含 while(IndexOfSentenceOfAllDocument.contains(temp)) { IndexOfSentenceOfAllDocument.remove(temp); } /*for (int j = 0; j < IndexOfSentenceOfAllDocument.size(); j++) { if (m == IndexOfSentenceOfAllDocument.get(j)) { IndexOfSentenceOfAllDocument.remove(j); } }*/ } } } int index; ArrayList<String> delList = new ArrayList<String>(); for (int n = 0; n < IndexOfSentenceOfAllDocument.size(); n++) { index = IndexOfSentenceOfAllDocument.get(n); delList.add(SentenceOfAllDocument.get(index));// SentenceOfAllDocument.remove(IndexOfSentenceOfAllDocument.get(n));//不能直接remove Integer对象,而且直接删除,索引也会乱了 } SentenceOfAllDocument.removeAll(delList);//这样一次性删除 System.out.println("countofWordInSentence:精简后句子共有 " + SentenceOfAllDocument.size() + "个"); } 对于多次用到函数取值的,你可以将这个赋给一个变量,用到的地方直接用变量,省得每次都去获取,如ConceptFromExcel.size()就可以赋值给一个变量 public static void simplySentenceOfAllDocument(List<String> SentenceOfAllDocument, List<String> ConceptFromExcel) { System.out.println("countofWordInSentence:初始句子共有 " + SentenceOfAllDocument.size() + "个"); int sizei = SentenceOfAllDocument.size(); int sizej = ConceptFromExcel.size(); for (int i = 0; i < sizei; i++) { boolean flag = false; for (int j = 0; j < sizej; j++) { if (SentenceOfAllDocument.get(i).indexOf(ConceptFromExcel.get(j)) != -1) { flag = true; break; } } if (!flag) { SentenceOfAllDocument.remove(i); i--; sizei--; } } System.out.println("countofWordInSentence:精简后句子共有 " + SentenceOfAllDocument.size() + "个"); } CSDN兄弟,又在啊! 呵呵 ... 对了,小弟这里也有一个问题,求指教:http://bbs.csdn.net/topics/390535794 你的索引,无非是SentenceOfAllDocument的下标,如果直接在循环里remove,势必破坏SentenceOfAllDocument下标的顺序了。如果索引的顺序是先小后大,后面再remove大的,不管是得不到正确的要删除的内容,甚至有可能下标越界。 Java游戏的背景图片在Eclipse中可以显示,用的也是绝对路径。但是导出jar包之后就不显示图片了。 最基本的图形界面问题,谁来帮忙解答 求一个httpclient的例子.! 一个小问题,有情绪的帮忙看看! Jspinner 怎么改它的长度? 關于接口初始化問題 请教大虾-----语句块的问题 Jbuilder怎么运行控制台程序? 时间格式转换问题 请高手帮我解释解释!一定给分! JVM加载class的机制? java中gb2312到UTF-8转换问题
for(int i=SentenceOfAllDocument.size-1;i>=0;i--){
int count=0;
for(String str:ConceptFromExcel){
if(!SentenceOfAllDocument.getIndex(i).equals(str)){
count++;
}else{
break;
}
}
if(count==ConceptFromExcel.size()){
SentenceOfAllDocument.remove(SentenceOfAllDocument.getIndex(i));}
)
}
System.out.println(SentenceOfAllDocument);我没有测,大概这思路
public static void simplySentenceOfAllDocument(ArrayList<String> SentenceOfAllDocument,
ArrayList<String> ConceptFromExcel)
{
ArrayList<Integer> IndexOfSentenceOfAllDocument = new ArrayList<Integer>();
System.out.println("countofWordInSentence:初始句子共有 " + SentenceOfAllDocument.size() + "个");
for (int i = 0; i < ConceptFromExcel.size(); i++)
{
System.out.println(i + "/" + ConceptFromExcel.size());
for (int m = 0; m < SentenceOfAllDocument.size(); m++)
{
if (!SentenceOfAllDocument.get(m).contains(ConceptFromExcel.get(i)))
{
//如果句子里面不存在这个词,则将句子的索引放入数组
IndexOfSentenceOfAllDocument.add(m);
}
else
{
//句子里面有这个词,则查找这个句子的索引是否在数组中,如果存在,则删除这个索引
Integer temp = m;//转换为Integer判断是否包含
while(IndexOfSentenceOfAllDocument.contains(temp))
{
IndexOfSentenceOfAllDocument.remove(temp);
}
/*for (int j = 0; j < IndexOfSentenceOfAllDocument.size(); j++)
{
if (m == IndexOfSentenceOfAllDocument.get(j))
{
IndexOfSentenceOfAllDocument.remove(j);
}
}*/
}
}
}
int index;
ArrayList<String> delList = new ArrayList<String>();
for (int n = 0; n < IndexOfSentenceOfAllDocument.size(); n++)
{
index = IndexOfSentenceOfAllDocument.get(n);
delList.add(SentenceOfAllDocument.get(index));
// SentenceOfAllDocument.remove(IndexOfSentenceOfAllDocument.get(n));//不能直接remove Integer对象,而且直接删除,索引也会乱了
}
SentenceOfAllDocument.removeAll(delList);//这样一次性删除
System.out.println("countofWordInSentence:精简后句子共有 " + SentenceOfAllDocument.size() + "个");
}
public static void simplySentenceOfAllDocument(List<String> SentenceOfAllDocument, List<String> ConceptFromExcel) {
System.out.println("countofWordInSentence:初始句子共有 " + SentenceOfAllDocument.size() + "个");
int sizei = SentenceOfAllDocument.size();
int sizej = ConceptFromExcel.size();
for (int i = 0; i < sizei; i++) {
boolean flag = false;
for (int j = 0; j < sizej; j++) {
if (SentenceOfAllDocument.get(i).indexOf(ConceptFromExcel.get(j)) != -1) {
flag = true;
break;
}
}
if (!flag) {
SentenceOfAllDocument.remove(i);
i--;
sizei--;
}
}
System.out.println("countofWordInSentence:精简后句子共有 " + SentenceOfAllDocument.size() + "个");
}