- - PR -
コメントの書き方
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2004-12-17 20:21
初めまして、Javaど・初心者です。
現在、いまから始めるJAVAで勉強中です。 サンプルのプログラムを書いてて気づいたのですが、コメントの書き方というか コメントをどこに書くかによってプログラムが動かなくなることに気づきました。 コメントの書き方で注意点などはありますでしょうか? もしご存知でしたら、教えてください。 尚、エラーとなったソースは、いまから始めるJAVA『第13回 制御構造としての例外』 でのサンプル文です。 -------------------------------------------------------------------------------- package jp.co.atmarkit.java; import java.net.*; import java.io.*; public class HTMLDocument2 { private StringBuffer source; //sourceのインスタンスを作成 public HTMLDocument2() { source = new StringBuffer(); } //sourceにhtmlのデータを設定 public void setSource ( String html ) { /*先頭が<html>で始まるデータだったら、 まずsourceを初期化してからhtmlの内容を設定*/ if (( html.indexOf( "<html>" ) == 0 ) || ( html.indexOf( "<HTML>" ) == 0 )) { source.delete ( 0, source.length() ); source.append(html); } } public String getSource() { return source.toString(); } //htmlデータから、文字列のみを取得 public String getPlainText() { boolean processingTag = false; StringBuffer text = new StringBuffer(); int pos; int start = 0; for ( pos = 0 ; pos < source.length() ; pos++ ) { //タグ読み込みモード if ( processingTag ) { if ( source.charAt(pos) != '>' ) { for ( pos++ ; pos < source.length() ; pos++ ) { if ( text.charAt(pos) == '>' ) { break; } } } start = pos + 1; //テキスト読み込みモード } else { if ( source.charAt(pos) != '<' ) { for ( pos++ ; pos < source.length() ; pos++ ) { if ( source.charAt(pos) != '<' ) { if ( source.charAt(pos+1) == ' ' ) { continue; } text.append(source.substring(start, pos)); break; } } } } processingTag = !processingTag; } //text(StringBuffer型)の文字列バッファを、そのデータを表現する文字列に変換 return text.toString(); } //URLからhtmlデータを取得 public void loadFromURL ( String sourceURL ) throws MalformedURLException { /*MalformedURLException:無効な書式のURLが発生したことを示すためにスローされる。 指定文字列の中に有効なプロトコルが見つからないか、文字列を解析できないかのどちらか*/ source.delete( 0, source.length() ); try { URL url = new URL(sourceURL); Object content = url.getContent(); if ( content instanceof InputStream ) { String line; BufferedReader reader = new BufferedReader( new InputStreamReader((InputStream)content, "JISAutoDetect")); /*BufferedReader:文字、配列、行をバッファリングすることによって 文字列入力ストリームからテキストを効率よく読み込む InputstreamReader:バイトデータを指定された文字エンコーディングを 使用して文字に変換する*/ while (( line = reader.readLine() ) != null ) source.append(line + "\n"); //readerの1行のテキストを読み込んだらそれをlineに設定 } } catch ( IOException e ) { source.append ("<html></html>"); } } } -------------------------------------------------------------------------------- 長くてすみません(^^; 初心者なので、「こんなこと誰もやらないぞ」ということもやってしまってそうで心配です。 アドバイスよろしくお願いします。 | ||||
|
投稿日時: 2004-12-17 20:35
どんなエラーですか?
当方j2se 1.4.2_06ですが、エラーは出ません。
/* */ を入れ子にしない、ぐらいしか私には思いつかない。 | ||||
|
投稿日時: 2004-12-17 21:01
早速のお返事ありがとうございます。
サンプルプログラムのほかに、このプログラムを呼び出して実行する ShowTextFromURL.javaもあります。これは、先ほど記述した問題のjavaプログラムを importして、HTMLのテキスト部分を表示させてくれるプログラムです。 これをコンパイルさせて、実行すると ------------------------------------------------------------------------ >java ShowTextFromURL http://www.atmarkit.co.jp Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String ind ex out of range: 2 at java.lang.StringBuffer.charAt(Unknown Source) at jp.co.atmarkit.java.HTMLDocument2.getPlainText(HTMLDocument2.java:38) at ShowTextFromURL.main(ShowTextFromURL.java:16) ------------------------------------------------------------------------ というエラーメッセージが出力されます。 情報が不足しててすみません。よろしくお願いします。m(__)m | ||||
|
投稿日時: 2004-12-17 21:06
ちなみに、私の環境はJava(TM) 2 SDK, Standard Editionのバージョン1.4.2です。
ですので、めぐさんのところでエラーにならなかったのは、もしかしたらバージョンの違い なのかもしれません。 | ||||
|
投稿日時: 2004-12-17 21:42
コメント云々やバージョンは全く関係ないと思います。
>情報が不足しててすみません。よろしくお願いします。m(__)m エラーの原因はメッセージ(スタックトレース)に 書いてあるように見えますが…。 java.lang.StringIndexOutOfBoundsExceptionが何なのか 調べるところから始めてみてください。 | ||||
|
投稿日時: 2004-12-17 22:11
すみません!!!
情けないのですが、自分のコーディングミスでした。 本当にすみませんです。。。m(__;)m みなさんのメッセージはとても参考になりました。 本当にありがとうございました。 [ メッセージ編集済み 編集者: いだっち 編集日時 2004-12-17 22:17 ] |
1