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

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

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

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

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

Q&A

解決済

3回答

1018閲覧

Javaで文字列のsplitメソッドが値を返さない

showggg

総合スコア23

Java

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

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

0グッド

0クリップ

投稿2021/08/20 11:06

編集2021/08/20 11:15

ご覧いただき、ありがとうございます。

他言語(主にJavaScript, PHP, Pythonなどのスクリプト言語)の経験はありJavaは初心者の者です。

eclipseを使用して文字列をsplitメソッドを使用してリストに分割しようと思ったのですが思ったような挙動をしなく、解決方法がわからず困っています。

どなたか解決方法がわかる方、ご教授いただければ幸いです。
補足が必要な場合は追記いたします。
よろしくお願いいたします。

やりたいこと

  • 文字列「2016.8.2」を「20160802」と整形したい。

エラーが起きているコード

Java

1package first; 2 3import java.text.MessageFormat; 4 5public class Main { 6 7 public static void main(String[] args) { 8 // TODO 自動生成されたメソッド・スタブ 9 // ================================================================================ 10 // MAIN 11 // ================================================================================ 12 13 String time = "2016.8.2"; 14 String[] textlist = time.split("."); 15 String year = textlist[0]; 16    String month = String.format("%2s", textlist[1]).replace(" ", "0"); 17    String date = String.format("%2s", textlist[2]).replace(" ", "0"); 18    String text = MessageFormat.format("{0}{1}{2}", year, month, date); 19 } 20 21}

エラー内容

shell

1Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 0 out of bounds for length 0 2 at java_lesson/first.Main.main(Main.java:15)

備考

  • textlist配列に無い要素を取り出そうとしていると怒られているので、原因はtime.split(".")が正常に値を返してないと思います。

環境

Windows 10 Home
Chrome 最新版
Eclipse IDE for Enterprise Java and Web Developers version 2021-06
Java SE 11

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

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

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

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

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

m.ts10806

2021/08/20 11:10

コードはエディタのものをコピペで提示してください。 行数は不要です。 コピペで再現確認できません。
jimbe

2021/08/20 11:14

split のドキュメントは読まれていらっしゃいますでしょうか。
showggg

2021/08/20 11:16

m.ts.10806さん、指摘ありがとうございます。 訂正いたしました。
showggg

2021/08/20 11:16

jimbeさん、はいドキュメントは確認済みです。
jimbe

2021/08/20 11:19

ドキュメントを読まれていれば、正規表現の指定であり、正規表現で"."が何を意味するか…という展開になると思うのですが、そのような経過が無くご質問されたのは何故でしょうか。
showggg

2021/08/20 11:23

jimbe, YT0014さん、本当ですね...すみません、誤認していました。 指摘ありがとうございます。
jimbe

2021/08/20 11:29

他の言語の何かと混ざっちゃったのかも知れないですね^^;
showggg

2021/08/20 11:40

スクリプト言語しか経験がなかったので、決まりの多いJavaに少し抵抗を感じて混乱していたかもしれないです。 以後気を付けて頑張ります。
guest

回答3

0

ベストアンサー

0ですね。

java

1 2 String time = "2016.8.2"; 3 String[] textlist = time.split("."); 4 System.out.println(textlist.length);

.は正規表現に利用される文字列であるため、と思われます。
なので、エスケープします。

java

1 String time = "2016.8.2"; 2 String[] textlist = time.split("\."); 3 System.out.println(textlist.length);

ドキュメントに明記されています。

public String[] split(String regex)

この文字列を、指定された正規表現に一致する位置で分割します。

regex
正規表現文字列を受け付けることが想定されています。
単に.では何もヒットしません。

投稿2021/08/20 11:16

編集2021/08/20 11:20
m.ts10806

総合スコア80850

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

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

showggg

2021/08/20 11:21

ありがとうございます! 実際に動かして確認してみたところ、思い通りの挙動が確認できました。 助かりました。これからもJavaを上達すべく精進しようと思います。
m.ts10806

2021/08/20 11:25

今回はJavaの問題ではないと思います。 ドキュメントから「正規表現ってなんだろう」と発想を辿れるかどうかです。 Javaに限らず大事なことです。 プログラミング言語は様々な機能を実現するために特殊な意味を持つ文字列だったり定数だったり標準機能だったり、多くを持っています。 ドキュメントに明記されていますので、そこからちゃんと辿れるか。 もっと言えば「興味を持てるか」です。
showggg

2021/08/20 11:29

ちょっと結果を出すのに必死だったかもしれないです。 プログラミング自体は本来は好きでやることに抵抗はないので、落ち着いてしっかり学習していきたいと思います。
m.ts10806

2021/08/20 11:44

「書いた通りにしか動かない」のが大前提なので焦らず1つずつ、 自分が書いたコードを他人に説明できるようになるところを目指しましょう。
showggg

2021/08/20 11:57

ありがとうございます! はい、頑張ります。
guest

0

"." の代わりに "[.]" でもできます。

java

1class Main { 2 public static void main(String[] args) { 3 String time = "2016.8.2"; 4 String[] s = time.split("[.]"); 5 if (s[1].length() == 1) s[1] = "0" + s[1]; 6 if (s[2].length() == 1) s[2] = "0" + s[2]; 7 String text = s[0] + s[1] + s[2]; 8 System.out.println(text); 9 } 10}

format や replace を使わなくても、length だけでできます。
初心者が見ても一目瞭然。

投稿2021/08/20 12:37

kazuma-s

総合スコア8224

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

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

0

String.splitは正規表現で文字列を分割します。よって.という文字列で分割したい場合には以下のようにエスケープしてやる必要があります。

jshell> String time = "2016.8.2"; time ==> "2016.8.2" jshell> String[] textlist = time.split("\."); textlist ==> String[3] { "2016", "8", "2" }

投稿2021/08/20 11:35

neko_the_shadow

総合スコア2230

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問