本帖最后由 pooq 于 2013-08-02 00:41:31 编辑

解决方案 »

  1.   

    List对象貌似用Iterator要比你的for要快好多的
      

  2.   


    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);我没有测,大概这思路
      

  3.   


     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() + "个");
        }
      

  4.   

    对于多次用到函数取值的,你可以将这个赋给一个变量,用到的地方直接用变量,省得每次都去获取,如ConceptFromExcel.size()就可以赋值给一个变量
      

  5.   


        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() + "个");
        }
      

  6.   

    CSDN兄弟,又在啊! 呵呵  ... 对了,小弟这里也有一个问题,求指教:http://bbs.csdn.net/topics/390535794
      

  7.   

    你的索引,无非是SentenceOfAllDocument的下标,如果直接在循环里remove,势必破坏SentenceOfAllDocument下标的顺序了。如果索引的顺序是先小后大,后面再remove大的,不管是得不到正确的要删除的内容,甚至有可能下标越界。