全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1810
推到 Plurk!
推到 Facebook!

請教讀檔的問題

尚未結案
過路的
一般會員


發表:11
回覆:17
積分:5
註冊:2004-04-01

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-12-18 18:09:47 IP:211.76.xxx.xxx 未訂閱
  public void show(){
    try{
      FileReader fr=new FileReader("C:/java/loadfile/src/loadfile/02.txt");
      int clock1=0,clock2=0,t;
      String search;
      char arr[]=new char[100];
      fr.read(arr);
      clock1=81;
      clock2=clock1;
      while(arr[clock2]!=13){
        clock2  ;
      }
      clock2-=clock1;
      search=String.valueOf(arr,clock1,clock2);      
      System.out.println(search);
    }
    catch(IOException error){
      System.out.println(error.getMessage());
    }
  }
-------------------------------------------------(以下是錯誤訊息)  
  java.lang.ArrayIndexOutOfBoundsException: 100
        at loadfile.Frame1.show(Frame1.java:30)
        at java.awt.Component.show(Component.java:1133)
        at java.awt.Component.setVisible(Component.java:1088)
        at loadfile.loadstring.(loadstring.java:39)
        at loadfile.loadstring.main(loadstring.java:50)
  Exception in thread "main" 
------------------------------------------------------------------- 我想請問一下,我這段程式是要檢查純文字檔的內容,clock1=81是我要讀取的資料開頭,但是我只要將clock1設定超過79,就會出現上述的錯誤訊息,如果在79以內,都可以正常執行;當初看訊息時,以為是說我宣告的陣列不夠長,但後來我把陣列加長到200,問題仍未解決,請問是我哪邊沒注意到嗎?
allenchan
資深會員


發表:10
回覆:306
積分:283
註冊:2004-01-06

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-12-18 23:47:50 IP:61.62.xxx.xxx 未訂閱
我看到一個可能發生問題的點,當您的 clock2++ 到超過 100 時,arr[clock2] 就會超過範圍,程式就掛了,紅字部份您加上去試試看:
  public void show(){
    try{
      FileReader fr=new FileReader("C:/java/loadfile/src/loadfile/02.txt");
      int clock1=0,clock2=0,t;
      String search;
      char arr[]=new char[100];
      fr.read(arr);
      clock1=81;
      clock2=clock1;
      while(arr[clock2]!=13 && clock2 < 100){
        clock2  ;
      }
      clock2-=clock1;
      search=String.valueOf(arr,clock1,clock2);      
      System.out.println(search);
    }
    catch(IOException error){
      System.out.println(error.getMessage());
    }
  }
發表人 - allenchan 於 2004/12/18 23:51:51
ahan
一般會員


發表:11
回覆:18
積分:15
註冊:2002-07-07

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-12-19 00:01:18 IP:220.134.xxx.xxx 未訂閱
覆不要把你的02.txt一起放上來對照,比較容易看出錯誤在哪喔 ^^ 發表人 - ahan 於 2004/12/19 00:02:02
過路的
一般會員


發表:11
回覆:17
積分:5
註冊:2004-04-01

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-12-19 00:42:27 IP:211.76.xxx.xxx 未訂閱
感謝2位大大的說明,小弟將我的文件貼上來,希望能有所幫助! 因為我是要對這些內容做分類,加以存入資料庫,所以希望最好是一次就把所有資料都做完分析。 大達通運公司 醉新型歐洲原裝冷汽車出租 紀華邦 地址:台北市北投區中和街459號1F TEL:(02)8916170 行動電話:090138726 呼叫器:060377143 -------------------------------------------------------------------- while(arr[clock2]!=13) ←關於這一行,小弟是用來檢查是否到字串尾端,不知道是JAVA本身的問題還是怎麼回事,他讀到的整行字串尾端,除了換行符號10之外,在10的前一個字元位址,就存著13這個碼,所以小弟就以13當作是否到字串尾端的判斷。 發表人 - 過路的 於 2004/12/19 00:44:41 發表人 - 過路的 於 2004/12/19 00:49:50
ahan
一般會員


發表:11
回覆:18
積分:15
註冊:2002-07-07

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-12-19 01:13:28 IP:220.134.xxx.xxx 未訂閱
我可以正確執行說 ^^ 你的02.txt的字元數也超過79哩 要不要再run run看,說不定那時你的02.txt有修改過而忘記了 再試試囉 ~別在沙塔上築高樓~ 發表人 - ahan 於 2004/12/19 01:16:15
neoart
版主


發表:22
回覆:582
積分:425
註冊:2003-05-09

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-12-19 09:05:41 IP:61.56.xxx.xxx 未訂閱
你可以說明一下你要如何"分析"這段文字嗎?或許可以換一下別的方式方法,達成你想要的結果. 光是這樣請人家debug而不說明目的的話,是有點吃力.
過路的
一般會員


發表:11
回覆:17
積分:5
註冊:2004-04-01

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-12-19 09:27:45 IP:211.76.xxx.xxx 未訂閱
感謝 neoart、ahan、allenchan 三位大大的幫忙,小弟終於找到問題了。 問題在讀取內容不 > = 陣列大小時,文件的最後一行被 fr.read(arr); 讀取至記憶體之時,不滿陣列大小的部分,會被JAVA加入 ASCII碼:0 ,用來填補不足之處,所以只有最後一行的結尾碼會與前面的所有字串的結尾碼都不同,也就是說只要我在while(arr[clock2]!=13) 裡面的判斷條件加入 && arr[clock2]!= 0 ,問題就解決了,感謝三位大大的提醒、幫忙。
系統時間:2024-05-08 12:13:18
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!