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

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

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

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

正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

Q&A

解決済

2回答

861閲覧

java splitでスペースの分割ができない

gknjnjtnj

総合スコア7

Java

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

正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

0グッド

0クリップ

投稿2021/08/04 06:37

前提・実現したいこと

javaで循環小数を考慮した3つの数値の和を求めるプログラムを作っています。

発生している問題・エラーメッセージ

うまくsplitが動作せず下のようなエラーメッセージが出ます。

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 1 out of bounds for length 1

該当のソースコード

java

1 2public static void main(String[] args) { 3 4 Scanner scanner = new Scanner(System.in); 5 //BigDecimal 6 String str = scanner.next(); 7 String[] s = str.split(" "); 8 BigDecimal a = new BigDecimal(s[0]); 9 BigDecimal b = new BigDecimal(s[1]); 10 BigDecimal c = new BigDecimal(s[2]); 11 12 BigDecimal result = a.add(b); 13 System.out.println(result.add(c)); 14 }

試したこと

splitの中身を正規表現で実行してもうまくいきませんでした。
しかし、[,]で分割した場合はうまくいきました。

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

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

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

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

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

m.ts10806

2021/08/04 06:47 編集

入力値をコピペしてください コードは書いたとおりにしか動かないので「ないものはない」としかならないと思います。 そもそも想定の値は来ていますか?
guest

回答2

0

ベストアンサー

質問する前に公式のマニュアルは読んだ方がいいですよ。

https://docs.oracle.com/javase/jp/11/docs/api/java.base/java/util/Scanner.html

Scannerは、区切り文字のパターンを使用して入力をトークンに分割します。デフォルトでは区切り文字は空白文字です。

投稿2021/08/04 06:47

編集2021/08/04 06:48
Luice

総合スコア771

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

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

m.ts10806

2021/08/04 06:48

デバッグすれば一発ですね。
gknjnjtnj

2021/08/04 06:51

解決しました。ありがとうございます。
guest

0

そもそもですが、なにが来るか分からない(プログラム側の期待する情報が送信されるか保証されない)ユーザー入力において、配列の番号決め打ちで、且つエラーハンドリングなしは実装としてかなり危険と思います。

アプリケーション側で受け入れる数が決まっているなら参照前にsplit後の配列の個数をチェックするとか、直打ちする前にその番号を持っているかチェックするなどの工夫が必要です。

そこは要件次第ですが、「やってくる値は可変」ならループを利用しましょう。
また、必ず数字(に解釈できる文字列)が来るとは限らないのでエラーハンドリングしましょう。
IDEを使っていればtry-catchを入れるかメソッドにthrowsつけるかエラーのような警告が出てそもそもコンパイルできない状態になると思います。

投稿2021/08/04 07:18

編集2021/08/04 07:31
m.ts10806

総合スコア80861

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

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

m.ts10806

2021/08/04 07:22

>エラーのような警告が出て BigDecimalだから出ないですね失礼。変換できなければNullかな。 ただ、テストケースは色々試されたほうが良いです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問