2012-11-15 43 views
0

這是一段代碼片段。它給了arrayindexoutofboundexception。不知道爲什麼?爲什麼在重新安排doc文件段時數組索引超出限制的異常?

import java.io.File; 
import java.io.FileInputStream; 
import org.apache.poi.hwpf.HWPFDocument; 
import org.apache.poi.hwpf.extractor.WordExtractor; 
import org.apache.poi.xslf.usermodel.XSLFTextParagraph; 


public class wordcount 
{ 
public static void main(String[] args) throws Exception 
{ 


     File file = new File("E:\\myFiles\\abc.doc"); 
     FileInputStream fis=new FileInputStream(file.getAbsolutePath()); 
     HWPFDocument document=new HWPFDocument(fis); 
     WordExtractor extractor = new WordExtractor(document); 
     String [] fileData = extractor.getParagraphText(); 

     for (int i = 0; i < fileData.length; i++) 
      { 

       // System.out.println(fileData[i].toString()); 
       String[] paraword = fileData[i].toString().split(" "); 
       // out.println(paraword.length); 

       if(paraword[i].length() == 0) 
       { 
        System.out.println("\n"); 
       } 
       else if(paraword[i].length() > 0 && paraword[i].length() < 12) 
       { 
        for(int k=0 ; k < paraword[i].length()-1 ; k++) 
        { 
         System.out.println(paraword[k].toString()); 
        } 
       } 
       else if(paraword[i].length() >= 12 ) 
       { 
        for(int k=0 ; k < 12 ; k++) 
        { 
         System.out.println(paraword[k].toString()); 
        } 
       } 


       System.out.println("\n"); 

      } 

} 
} 

這是abc.doc文件

this is the abc.doc

注意的圖像:預期輸出將Java控制檯上進行打印。

並且輸出將在每行中包含12個單詞。但是執行第一行後會發生錯誤。

任何幫助,將不勝感激

TIA

回答

1

老實說,我不熟悉apache.org API,但只要看一眼你的邏輯它看起來像要替換的每一個實例:

paraword[i].length()

有:

paraword.length 

因爲它看起來像要檢查段落中有多少單詞,而不是段落的第一個單詞的長度。糾正我,如果我錯了,但我認爲這會解決你。

+0

感謝您的回覆。我用'paraword.length'改變了'paraword [i] .length()',並且Array索引超出界限的問題解決了。但是,其印刷的文字只有12個字多於12個字。 – ARNAB2012

+0

如果您想要在同一行上打印單詞,則需要使用'System.out.print()'方法而不是'System.out.println()'。如果你使用'System.out.println(「\ n」)'它應該給你兩行而不是一行。爲了讓它寫出段落中的所有行,它會變得更加複雜,我不得不更多地思考它。 –

+0

謝謝艾米。問題已經解決了。我在下面發佈修改後的代碼。 – ARNAB2012

0

下面是正確的代碼片斷

import java.io.File; 
import java.io.FileInputStream; 
import java.io.IOException; 
import java.util.ArrayList; 
import java.util.Arrays; 
import org.apache.poi.hwpf.HWPFDocument; 
import org.apache.poi.hwpf.extractor.WordExtractor; 

public class ExtractWordDocument 
{ 
public String myString() throws IOException 
    { 
     File file = new File("PATH FOR THE .doc FILE"); 
     FileInputStream fis=new FileInputStream(file.getAbsolutePath()); 
     HWPFDocument document=new HWPFDocument(fis); 
     WordExtractor extractor = new WordExtractor(document); 
     String [] fileData = extractor.getParagraphText(); 

     ArrayList<Object> EntireDoc = new ArrayList<>(); 

     for (int i = 0; i < fileData.length; i++) 
      { 
       String[] paraword = fileData[i].toString().split("\\s+"); 
       if(paraword.length == 0) 
        {EntireDoc.add("\n");} 
       else if(paraword.length > 0 && paraword.length < 12) 
        { 
        for(int k=0 ; k < paraword.length ; k++) 
         {EntireDoc.add(paraword[k].toString()+" ");} 
        } 
       else if(paraword.length > 12 ) 
        { 
        java.util.List<String> arrAsList = Arrays.asList(paraword); 
        String formatedString = arrAsList.toString() 
              .replace(",", "") //remove the commas 
              .replace("[", "") //remove the right bracket 
              .replace("]", ""); //remove the left bracket 

        StringBuilder sb = new StringBuilder(formatedString); 
        int i1 = 0; 
        while ((i1 = sb.indexOf(" ", i1 + 75)) != -1) 
         {sb.replace(i1, i1 + 1, "\n");} 
        EntireDoc.add(sb.toString()); 
        } 

       EntireDoc.add("\n"); 
      } 

      String formatedString = EntireDoc.toString() 
              .replace(",", "") //remove the commas 
              .replace("[", "") //remove the right bracket 
              .replace("]", ""); //remove the left bracket 

     return formatedString; 
    } 

public static void main(String[] args) 
{ 
    try{ 
    System.out.print(new ExtractWordDocument().myString()); 
    } 
    catch(IOException ioe){System.out.print(ioe);} 

} 

} 

注:此代碼將不打印在每行12個字,但75個charecters中的每一行。

相關問題