2014-02-10 110 views
0

我試圖將沒有空格的句子分成3個單詞集。以下是句子。我的代碼的For循環錯誤?

MyNamePanBokVa 

以下是我的代碼

public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException 
    { 
     //String[] listOfWords = request.getParameter("wordList").trim().split("\n"); 
     //int percentage = Integer.parseInt(request.getParameter("percentage")); 

     PrintWriter pw = response.getWriter(); 

     int numberOfKnownWords = 0; 

     //Read the Hash File 
     String str = ""; 
     File inputFile = new File("C:/Users/xxx/Desktop/Test.txt"); 
     HashSet<String>set = new HashSet<String>(); 
     BufferedReader br = new BufferedReader(new FileReader(inputFile)); 

     while((str=br.readLine())!=null) 
     { 
      int lastIndex = 0; 

      for(int i=0;i<=str.length();i=i+3) 
      { 
       try 
       { 
        String stringPiece = str.substring(i, i+3); 
        lastIndex = i; 
        pw.println(stringPiece); 
       } 
       catch(Exception arr) 
       { 
        String stringPiece = str.substring(lastIndex, str.length()); 
        pw.println(stringPiece); 
       } 
      } 
     } 

    } 

不幸的是這會產生以下輸出。

MyN 
ame 
Pan 
Bok 
BokVa 

這是應該的,

MyN 
ame 
Pan 
Bok 
Bok 
Va 

我想有一個錯誤在我的for循環,但我無法發現它。這裏有什麼問題?

+0

你怎麼能指望兩次'Bok'的回報? – Aquillo

+1

您是否嘗試過逐步調試代碼?應該清楚問題在哪裏。 – assylias

+0

在預期的輸出中,這不應該是'My'和'Name'而不是'MyN'和'ame'嗎? –

回答

2

你需要把越來越stringPiece之前lastIndex的分配。在上面的代碼中,當你試圖獲取stringPiece時,異常將會生成,並且lastindex將變爲9,因此最後的字符串是錯誤的。

讓您的如下循環。

for(int i=0;i<=str.length();i=i+3) 
{ 
    try 
    { 
     lastIndex = i; 
     String stringPiece = str.substring(i, i+3); 
     pw.println(stringPiece); 
    } 
    catch(Exception arr){ 
     String stringPiece = str.substring(lastIndex, str.length()); 
     pw.println(stringPiece); 
    } 
} 
+0

謝謝。這是問題。 –

1

分配應該是

lastIndex = i+3; 

由於lastIndex將不會被設置,如果str.substring(i, i+3);拋出Exception

3

認爲箱子時i是V.

MyNamePanBokVa 
      ^

I = 12 迄今爲止輸出:

MyN 
ame 
Pan 
Bok 


    { 
    String stringPiece = str.substring(i, i+3); 
    //throws exception, lastindex is not updated 
    lastIndex = i; 
    } 
    catch(Exception arr) 
        {  
         String stringPiece = str.substring(lastIndex, str.length()); 
         // lastIndex =9 prints BokVa 
         pw.println(stringPiece); 
        } 
+0

感謝您的回覆。+1我:) –

0

它不在你的循環中。這就是你如何檢測到你必須打印最後一部分。

try { 
    String stringPiece = str.substring(i, i+3); 
    lastIndex = i; 

str.substring拋出一個異常,因爲i+3就是出在最後一次迭代界。 try塊將立即保留並繼續執行catch。但是您尚未修改lastIndex,並且catch塊將在當前之前打印一個迭代值。

解決您的問題,交換順序try塊

try { 
    lastIndex = i; 
    String stringPiece = str.substring(i, i+3); 
0

當i = 12, 「str.substring(I,I + 3)」 會拋出異常。因爲長度是14. 12 + 3是15. lastIndex現在是上一次的9.在catch中,「String stringPiece = str.substring(lastIndex,str.length());」等於「String stringPiece = str.substring(9,14);」現在,你最終得到BokVa。

1

可以做簡單得多:

while((str=br.readLine())!=null) 
    { 
     String [] pieces = str.split("(...)/g"); 
     for(int i=0;i<=pieces.length();i++) 
     { 
      pw.println(pieces[i]); 
     } 
    } 
+0

這將幫助我一天。+1從我。謝謝! –