JSPのcharAt()について

このQ&Aのポイント
  • JSPのcharAt()メソッドを使用して文字列を一文字ずつ配列に格納する際にエラーが発生します。
  • 文字列をString型に直接書き込むと動作することが確認されています。
  • BufferedReaderを使用してテキストファイルを読み込む際に起きるエラーの原因を教えてください。
回答を見る
  • ベストアンサー

JSPのcharAt()について

JSPです。text1.txtをBufferedReaderで読み込んで、一文字ごとにchar型のline[]という配列に入れようとしています。 しかし、l.charAt();の部分でエラー起きてしまいます。 原因は何なのでしょう? 文字列をString型に直接(String l = "aaaaaa";のように)書き込むと動くようです。 String path = getServletContext().getRealPath("/WEB-INF/text1.txt"); BufferedReader br = new BufferedReader(new FileReader(path)); String l = ""; char line[]; while((l = br.readLine()) != null){ line = new char[l.length()]; for(int j=0; j <= l.length(); j++){ line[j] = l.charAt(j); out.print(l.charAt(j)); } } どこがおかしいのか、原因がわかる方教えてください。 よろしくお願いします。

  • Java
  • 回答数1
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • PecoPlus
  • ベストアンサー率76% (144/188)
回答No.1

 こんにちは。  配列およびcharAtメソッドのインデックスがオーバーしていますよ。  たとえば、 char[] line = new char[2];  と、配列を確保すると、存在する配列は、  line[0]とline[1]です。  line[2]は存在しません。  for文でまわすなら、 for (int i = 0; i < line.length; i++)  としなければ、なりません。  また、StringクラスのcharAtメソッドのインデックスは、0 から length() - 1 の範囲になります。  ここも、オーバーしています。  また、単純に文字列のchar配列が欲しいのなら、 char[] line = l.toCharArray();  の方が、簡単だと思います。

bell_xxx
質問者

お礼

回答ありがとうございます。 for文の内容を書き換えるとうまく動きました。 .toCharArray()はうまくいきませんでしたが、その方が簡単っぽいですね。修正していこうと思います。 助かりました。ありがとうございました。

関連するQ&A

  • テキストファイルからの読み込みエラー

    app = getServletConfig().getServletContext(); fr =new FileReader(app.getRealPath("dbsplORA.txt")); br = new BufferedReader(fr); strPar = br.readLine(); br.close(); このような感じで、テキストファイルからの読み込みを行っていますが,なぜかいつもファイルが見つかりませんといわれます. ファイル自体はちゃんと名前も全半角あっています。 エラーメッセージに出ているものをコピーして貼り付けると動作します。 今回、Noを振り分け,ループしてたくさんのファイルを読み込もうと考えていますが,これのおかげで作成できません。 すみませんが、教えてもらえないでしょうか。 そして、今,仮ループで貼り付けて動かしていますが、最後らへんのテキストを読むとMalformedInputExceptionがでます。 ちなみに、ループで読み込みという意味は strBan = "dbsql"+strBan+".txt";//strBanはカウンターされている。 という意味です。よろしくお願いします。

    • ベストアンサー
    • Java
  • javaで大量のファイルを読み込む方法

    javaプログラミングについて質問です。 例えば、a1.txt~a100.txtの100個のテキストファイルがある として、これをループか何かを使って順番に読み込みたいのですが、 そのような方法はあるのでしょうか。 // ファイル入力ストリームを取得 BufferedReader br = new BufferedReader(new FileReader("a1.txt")); BufferedReader br2 = new BufferedReader(new FileReader("a2.txt")); BufferedReader br3 = new BufferedReader(new FileReader("a3.txt")); ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ BufferedReader br100 = new BufferedReader(new FileReader("a100.txt")); という風に書くのが面倒に思っています。 宜しくお願いします。

    • ベストアンサー
    • Java
  • jspでの二次元配列

    こんにちは。初めて質問させていただきます。よろしくお願いします。 現在javaで作ったプログラムをjspでも使えるようにしようと考えているのですが、 二次元配列がうまくjspで反映されず困っています。 jspに関してはほとんど無知で一から勉強している次第です。 そのためなるべく簡単に、と思い 以下のプログラムを、<% %>の間に入れるだけで動かせないかと思ったのですが エラーが出てしまいました。一次元の配列ならばできたのですが... ちなみに以下のプログラムはcsvファイルを読み込み、 多次元配列に格納していくというものです。 稚拙なプログラムで申し訳ありません... どなたかご教授いただければ幸いです。 import java.io.*; import java.util.StringTokenizer; import java.util.ArrayList; class Dog{  public static void main(String args[]) throws IOException{      String csv = "dognum.csv";      BufferedReader br = new BufferedReader(new FileReader(csv)); String[][] array = new String[100][]; int i = 0; while (true) { String line = br.readLine(); if(line==null) break; array[i] = line.split(","); i++; } for (i = 0; i < 101; i++) { for (int j = 0; j < array[i].length; j++) { System.out.println("["+i+"]["+j+"] = " + array[i][j]); } } } }

  • キーボードからの文字列検索

    いつもお世話になっております。 文字列検索をするプログラムを作っているのですが、キーボードから検索したい文字を入力して検索する方法がわかりません。コマンドラインからの検索はできたのですが、スペースが入ると思うように検索できないんです。 どなたかご教授頂けると大変うれしいです。 よろしくお願い致します。 import java.io.*; import java.util.*; class Search{ public static void main(String[] args) throws IOException, InterruptedException{ FileInputStream fis = new FileInputStream("input.txt"); InputStreamReader in = new InputStreamReader(fis); BufferedReader br = new BufferedReader(in); String msg = br.readLine(); Camera mySearch = new Camera(); String target = (args[0]); mySearch.setFocus(target.length()); BufferedReader console = new BufferedReader(new InputStreamReader(System.in)); System.out.println(msg); for(int i = 0; i < msg.length(); i++ ){ mySearch.shift(msg.charAt(i)); if(mySearch.compare(target)){ System.out.println("Pattern '" + target + "' is found at index of " + (i - target.length() + 1)); break; } } } }

  • charAt(0)について

    import java.io.*; class Sample3 { public static void main(String[] args) throws IOException { System.out.println("文字列を入力してください。"); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String str1 = br.readLine(); System.out.println("検索文字を入力してください。"); String str2 = br.readLine(); char ch = str2.charAt(0); int num = str1.indexOf(ch); if(num != -1) System.out.println(str1 + "の" + (num+1) + "番目に「" + ch + "」が見つかりました。"); else System.out.println(str1 + "に「" + ch + "」はありません。"); } char ch = str2.charAt(0);の部分ですが、 charAt(0)というのは ( )に書かれている番号「のみ」を参照するんですよね? だからもし「こ」んちにはと入力しても0番目の「こ」しか出さないはずなのに、 「に」 を入れたらちゃんと「3番目に に が見つかりました」と出るのはなぜですか?

    • ベストアンサー
    • Java
  • javaのファイル読み込み処理の質問です

    あるディレクトリから.txtファイルを検索し 検索して出た結果を1つずつ読み込んでいきたいです どのようにしたらよいのでしょうか? private static String path="C:\\textfolder "; public static voif main(String[] args) { File dir = new File(path); File[] files = dir.listFiles(); String fileName = dir.getName(); for (int s = 0; s < files.length; s++) { try {//ファイルオープン BufferedReader br = new BufferedReader(new FileReader(fileName)); } } catch (IOException e) { e.printStackTrace(); } } return; } } 現状はこのような感じになっています pathの中身はディレクトリのパスを指定しています。 ディレクトリはC:\textfolder でtextfolderというフォルダに.txt(拡張子)のファイルが複数あったとします。

    • ベストアンサー
    • Java
  • jspでファイルの読み込み

    jspでwebサーバーにある“1.txt”ファイルを読み込んでそれを表示するプログラムを作成したのですが、エラーが出てしまいます。サーバーの環境(jsp実行環境等)は問題ありません。以下のコードで何かおかしなところがありましたら教えてください。 <%@ page contentType="text/html" import="java.util.*,java.io.*" %> <% String result = ""; String h_s = ""; FileReader h_fr = new FileReader("1.txt"); BufferedReader h_br = new BufferedReader(h_fr); while(true){ h_s = h_br.readLine(); if (h_s == null){ break; } result = result + h_s; } %> <%= result %>

    • ベストアンサー
    • Java
  • JavaでString型をChar型に変換するプログラムが分かりません

    JavaでString型をChar型に変換するプログラムが分かりません;; どなかた助けて下さい。 下のプログラムの何がいけないんでしょうか?? いろいろ間違ってるところはあると思うんですが、教えて下さい! import java.io.*; class { public static void main(String args[]) throws IOException{ BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String str1 = br.readLine(); StringBuffer moji = new StringBuffer(str1); char nyuu=moji;

  • javaでファイル操作し検索するものを作ってます

    目的はテキストファイル内の文字列に検索をかけヒットしたものを表示する というものです import java.io.*; class kensakuTest{ public static void main(String[] args)throws IOException{ System.out.println("検索方法を選択してください。\n0:学籍番号で検索\n1:名前で検索\n2:出身地で検索"); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String str = br.readLine(); char res = str.charAt(0); //0が選択された場合 if(res == '0'){ System.out.println("学籍番号を入力してください。"); BufferedReader bn = new BufferedReader(new InputStreamReader(System.in)); String str0 = fn.readLine(); char num = str0.charAt(0); try{ FileReader freader = new FileReader("addressdata.txt"); BufferedReader breader = new BufferedReader(freader); String tmp = null; while((tmp=breader.readLine())!=null){ //完全一致 if(){ System.out.println("検索結果:"); System.out.println(tmp); } } breader.close(); }catch(IOException e){ System.out.println("e"); } } //1が選択された場合 if(res == '1'){ System.out.println("名前を入力してください。"); BufferedReader fn = new BufferedReader(new InputStreamReader(System.in)); String str1 = fn.readLine(); char name = str1.charAt(0); try{ FileReader freader = new FileReader("data.txt"); BufferedReader breader = new BufferedReader(freader); String tmp = null; //検索 //部分一致 while((tmp=breader.readLine())!=null){ if(tmp.indexOf(str1) > -1){ System.out.println("結果は:"); System.out.println(tmp); } } breader.close(); }catch(IOException e){ System.out.println("e"); } } //2が入力された場合 if(res == '2'){ System.out.println("出身地を入力してください。"); BufferedReader bl = new BufferedReader(new InputStreamReader(System.in)); String belong = bl.readLine(); try{ FileReader freader = new FileReader("addressdata.txt"); BufferedReader breader = new BufferedReader(freader); String tmp = null; while((tmp=breader.readLine())!=null){ //完全一致 if(){ System.out.println("検索結果:"); System.out.println(tmp); } } breader.close(); }catch(IOException e){ System.out.println("e"); } } } } 現状はここまでできましたが完全一致の検索のやり方がわかりません。 あと問題点があるのですが 読み取るファイルがこのような場合 2000,田中 太郎,福島県 2001,福島 太郎,東京都 名前で福島 と検索をかけたとします この場合答えが 2000,田中 太郎,福島県 2001,福島 太郎,東京都 と表示されてしまいます このカンマで区切られている学籍番号、名前、出身地をうまく分け それぞれ判別する方法はないのでしょうか? よろしくおねがいします。

    • ベストアンサー
    • Java
  • JSPで聞きたいことがあります。

    JSPを学んで一ヶ月になります。以下の内容で質問があります。 <%@ page contentType="text/html;charset=Shift_JIS"import="java.io.*,java.util.*" %> <html> <head> <title>住所録</title> </head> <body> <h1 style="font-size:14pt;background:#cccccc">住所録</h1> <table border="0"> <tr style="background:#00ccff"> <th>No.</th><th>名前</th><th>性別</th><th>電話番号</th><th>住所</th> </tr> <% String tmpStr; StringTokenizer tkn; FileReader fr=new FileReader( application.getRealPath("myData/data.txt")); BufferedReader br=new BufferedReader(fr); while(br.ready()){ tmpStr=br.readLine(); out.println("<tr style='background:#ffffcc'>"); tkn=new StringTokenizer(tmpStr,"\t"); while(tkn.hasMoreTokens()){ out.println("<td>" + tkn.nextToken() + "</td>"); } out.println("</tr>"); } br.close(); %> </table> </body> </html> というコードがあるのですが、上記のコード中にあるwhile文をdo分に変えて、whileと同じように表示するのは可能でしょうか?ちなみに私は、 do{ tmpStr=br.readLine(); out.println("<tr style='background:#ffffcc'>"); }while(br.ready()); tkn=new StringTokenizer(tmpStr,"\t"); do{ out.println("<td>" + tkn.nextToken() + "</td>"); out.println("</tr>"); br.close(); }while(tkn.hasMoreTokens()); と記述したのですが、実行してみると、一部しか表示されず、しかも全ての情報が <th>NO.</th> に入ってしまうのです。そこで質問ですが、whileからdo文に変えて同じように表示するのは可能なのでしょうか?わかる方がいれば、お願いします。

    • ベストアンサー
    • Java

専門家に質問してみよう