質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

7回答

13088閲覧

文字列の最後尾の指定

R.lawliet

総合スコア41

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2015/04/20 09:39

お世話になっております。

最後尾の文字列の取得をしたいのですが、
Eclipseに永遠とエラーを吐かれ、頭を悩ませております。

修正点の指摘を頂けるとありがたいです。
些細な問題かもしれませんが、もうどうしようもなく解けないのでどうかよろしくお願いします。

/*
String型変数msgを"ABCDEFG"で初期化し、
先頭から3文字の文字列を取得し、表示せよ。
また、最後尾の文字列を取得し、表示せよ。
※length()を使うこと*/

エラー箇所、★

lang

1package no211_Test_22; 2 3public class Test07 { 4 5 public static void main(String[] args) { 6 String msg = "ABCDEFG"; 7 8 System.out.println("先頭から3文字" + msg.substring(0,3)); 9 System.out.println("末尾の文字" + msg.substring(★msg.length()-1);★ 10 11 } 12}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答7

0

最後に1個、括弧")"が足りていませんよ^^;

投稿2015/04/20 10:19

編集2015/04/20 10:20
runun

総合スコア305

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

R.lawliet

2015/04/21 00:17

不覚でしたっ! )だけの問題では無かったのですが、 カッコは連続で書くと何個あるのか分からなくなるので今後気をつけます。 ご指摘感謝します。
runun

2015/04/21 04:23

)だけの問題だけではなかったのですか? 省略できるので、以下でOKだとおもったのですが。。。 System.out.println("末尾の文字" + msg.substring(msg.length()-1));
R.lawliet

2015/04/21 08:12

括弧は元々ついていたのですよ、どうしてもerrorが消えないので色々しながら、 ここに投稿するときに消えていただけの話で。。。 今日ここでharu666さんのコードを上書きした後はrununさんの仰る様に元々のコードで通ってしまいました。 何がどうなっていたのでしょうね・・・ どこかの文字が全角だったとかそういうのもあったのかもしれません(汗)
runun

2015/04/21 08:35

なるほど。そういうことですね。 解決されて良かったですね^^
swordone

2015/04/21 09:03

せっかくEclipse使ってるんですからエラーメッセージは読みましょう. エラー部分にマウスオーバーすれば何が問題なのか出てきますから.
guest

0

せっかくEclipseで書いているのですから、エラーメッセージをちゃんと読みましょう。

日本語環境なら、「構文エラーがあります。")" を挿入して Expression を完了してください」というエラーが出ているはずです。

投稿2015/04/20 11:16

argius

総合スコア9390

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

substringの定義では以下のように開始から終了のインデックスを指定することになっているので

public String substring(int beginIndex, int endIndex)
この文字列の部分文字列である新しい文字列を返します。部分文字列は、指定された beginIndex か
ら始まり、インデックス endIndex - 1 にある文字までです。したがって、部分文字列の長さは
endIndex-beginIndex になります。

パラメータ:
beginIndex - 開始インデックス (この値を含む)
endIndex - 終了インデックス (この値を含まない)
戻り値:
指定された部分文字列
例外:
IndexOutOfBoundsException - beginIndex が負の値である場合、endIndexがこの String オブジェ
クトの長さより大きい場合、あるいはbeginIndex が endIndex より大きい場合

変数を2つ定義する場合は以下のようになります。こちらの方でしょうか?

lang

1 System.out.println("末尾の文字" + msg.substring(msg.length()-1, msg.length()));

投稿2015/04/20 10:21

編集2015/04/20 10:23
haru666

総合スコア1591

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

R.lawliet

2015/04/21 00:13

ご回答ありがとうございます。 public String substring(int beginIndex, int endIndex) ネットの中で拾って来たものは()の中が1つで書き表されて居たので、 末尾の時は1つで書くのだと決めつけてしまっておりました。 必ずしも正解が載せてあるとは限らない、又は自分の場合は当てはまらない構文だったのでしょうね。 今一度ちゃんと基本の部分を読んで理解しようと思いました。 ありがとうございました!
haru666

2015/04/21 00:25

substringは2番目の引数を省略することもできます。 省略した場合はmsg.length()を指定した時と同じ動作になるはずです。 動作が確認出来たらmsg.length()を消してみるといいと思います。
swordone

2015/04/21 02:45

メソッドの引数の意味がわからなければ,調べて見るといいと思いますよ 今回のString#substringも substring(int beginIndex) substring(int beginIndex, int endIndex) 2種類のオーバーロードがあります. https://docs.oracle.com/javase/jp/6/api/java/lang/String.html ほとんどのクラスにこのようなドキュメントがあるので, 簡単に調べられますよ. まあ今回は単に括弧が足りないだけの話だったので,あまり関係ないかもしれませんが.
R.lawliet

2015/04/21 08:15

haru666さん、 貴方の仰る様にerrorを回避出来た後は消してみても問題ありませんでした。 なんだか狐につままれた気分です。。。 この様な事もあるんだな、という教訓になりました。ありがとうございます。 swordoneさん メソッドはなかなか扱いが難しいのでありがたいです。 仰るとおりまだまだ理解出来ておりませんでして(汗)
guest

0

最後のカッコが足りないとか。

投稿2015/04/20 10:23

jcs502ulf

総合スコア307

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

R.lawliet

2015/04/21 00:15

本当ですね、)が1つ足りなかったです(汗) しかしエラーの根本的原因は他にありました。 ここで質問するときはなるべく正確な回答が得られるよう最新の注意を払いたいと思います。
guest

0

System.out.println("末尾の文字" + msg.substring(msg.length()-1,msg.length()));

投稿2015/04/20 10:22

akapunts

総合スコア14

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

R.lawliet

2015/04/21 00:20

コメントありがとうございます。 こちらが本命のエラーだった様です。 ベストアンサーは迷ったのですが、より丁寧な説明を頂いた方に送らせて頂きました>< 申し訳ありませんorz
guest

0

※回答ではありません

エラーメッセージも書いた方がいいと思いますよ。

投稿2015/04/20 10:10

編集2015/04/20 10:14
alg

総合スコア2019

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

R.lawliet

2015/04/21 00:09

いつも質問の時は書くのですけれど、今回投稿し忘れておりました。 ご指摘ありがとうございます。 今後気をつけます。
guest

0

Javaはもう忘れましたが、

msg.substring(msg.length()-1);

だと、切り取りの最初の位置は指定されていますが、何文字切り出すかの指定がないような…

投稿2015/04/20 10:06

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2015/04/20 10:10

いいのか、余計なことをいいました。すいません。
退会済みユーザー

退会済みユーザー

2015/04/20 10:11

length()は文字数で、カウントは0オリジンだから msg.substring(msg.length()-2); かな… 多分。
退会済みユーザー

退会済みユーザー

2015/04/20 10:14

知らない言語のことは黙っていることにします。すいません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問