Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

先頭文字を抜いて出力

文字列に"----abc"や"____abc"(_は半角スペース),"-_-abc"が入力されたとき,'-'と'_'を出力せず"abc"だけを出力させるメソッドです。
    String liWord = "";            //""で初期化 

    public Item(String word) {

        int start = 0;            //先頭にくる文字のインデックス位置

        /*文字列の前が'-'か' 'の間,
         *先頭インデックス(start)を+1する.*/
        while (word.charAt(start) == '-' || word.charAt(start) == ' ') {

            start ++;

        }

        /*'-'と' 'を抜かして得た文字列を1行分として格納する.*/
        this.liWord = word.substring(start, word.length());

    }

"abc"が入っていると正常に動くのですが,'-'や'_'だけだとStringIndexOutOfBoundsExceptionエラーが出てしまいます。
start==word.length()-1のときは格納しないなど試してみましたが改善できませんでした。
このエラーの改善法は何かありますでしょうか?
ヒント等ご教授お願いします。

7

回答

3236

閲覧

7件の回答

評価

0

ここまできてるんだったら、後もう一息なのに。

「文字列の長さ」は、果たして、
「文字列の、個々の文字のインデックスの最大値」と同じかな?

評価

0

文字列の長さは"---abc"なら6で,インデックスが0~5ですよね。
>文字列の、個々の文字のインデックスの最大値
charAtでのインデックス値はlength()-1なので文字の長さの件と同じだと思うのですが・・・
個々の文字のインデックスとはどう捉えればいいのでしょうか?
個々というと'-'や'a'で区切ったcharの1文字分しか思い浮かびません;

調べてみましたが上記のことしかわからず・・・無知で申し訳ないです。

評価

0

わかってんのか? と思ったら、ちゃんとわかってるのか。

だったら、次はそうなってない箇所を探せばよい。

・・・でも、これ以上引っ張ってもなんだし。
インデックスを指定すべき箇所に、文字列長を入れちゃダメだよ。

評価

0

指摘された箇所と違うのですが、
while文がwordのインデックス値を越えても回ってしまうことに気づいて修正したら期待通りに動きました。

String liWord = null;            //""で初期化 

    /**
     * 引数の文字列の前方にある'-'や' 'を除去して,
     * 変数liWordに格納する.
     * @param word 1行分の文字列
     */
    public Item(String word) {

        int start = 0;            //先頭にくる文字のインデックス位置

        /*指定したインデックスの文字が'-'か' 'の間繰り返す.*/
        while (word.charAt(start) == '-' || word.charAt(start) == ' ') {

            start ++;            //'-'と' 'の数をカウント

            /*文字列の末尾まで'-'や' 'の場合は終了する.*/
            if (start > word.length()-1){

                break;

            }

        }

        /*前方の'-'と' 'を抜いて得た文字を1行分として格納する.*/
        if (start <= word.length() - 1){

            this.liWord = word.substring(start, word.length());

        }

    }

文字列長というと
this.liWord = word.substring(start, word.length());
のword.length()ですよね。
"---abc"の場合,substring(3,6)になるので問題ありませんでした。
直に入れるより変数に格納した方が末尾のインデックスだとわかりやすいのかも?
と、自分もこれ以上引っ張るのもなんなので。

不良社員さん本当にありがとうございました!m(__)m

評価

0

>指摘された箇所と違うのですが、

えー・・・。orz
API読んで出直してきます。m(_ _;m

あと、アタマをちょん切るだけなら、end無しstartだけでも大丈夫です。

評価

0

いえ、「指摘された箇所と違うところを修正してしまいましたが動きました」という意味です。
誤解招いてすみません;

評価

0

誤解じゃないでしょ。
俺の指摘した箇所は的外れだったわけだし。

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。