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

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

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

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

Q&A

解決済

5回答

35722閲覧

1234やabcdのような繋がった文字列や数列を、1, 2, 3, 4のように個別に分けたい

Nerd_run.

総合スコア60

Java

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

1グッド

1クリップ

投稿2018/04/25 09:47

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

java

1int a = 12; 2int b = 34; 3System.out.println( a + b ); 4 5int c = 1234; 6System.out.println( ? ); 7//cの値を、1, 2, 3, 4のように分割して読み込んで、 8//a + bのような計算をしたい 9

上記のような処理の仕方がわからず困っています。
配列に入れてみても、1234の塊で入ってしまってどうすればいいのか・・・。

DrqYuto👍を押しています

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

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

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

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

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

m.ts10806

2018/04/25 10:23

元々どのような要件や前程があって今回の質問に至ったんですか?
Nerd_run.

2018/04/25 11:15

個人的な趣味でやってますので、案件などではなく、プログラムを動かして遊んでいるときに、直接数列や文字列にアクセスできた方が入力する側が楽であったり、アクセスできないと処理ができないようなものも浮かんだため、今回質問させていただきました。 この説明は不要かと思い省略しました。
guest

回答5

0

10進数の桁ごとに切りたいと言う事なら

java

1int c = 1234; 2List<Integer> list = new ArrayList<>(); 3while (c > 0) { 4 list.add(c % 10); 5 c /= 10; 6}

投稿2018/04/25 11:25

swordone

総合スコア20675

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

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

Nerd_run.

2018/04/27 09:33

回答ありがとうございます。 短いコードですが、理解に時間がかかっています。。
swordone

2018/05/02 16:18

前もこんな桁を取り出す方法としてこの剰余の方法提示したら理解されないことがあったけど、 そんなわからないかなこれ?
pepperleaf

2018/05/03 03:06

こっちがシンプルですね。 剰余って普段、使わない? Listも慣れないと分かりにくい? でしょうか。
Nerd_run.

2018/05/03 09:31

あ、わかりました。 1位以外は10で必ず割れて、余りに1の位が残るのを使ってるんですね。 listもほとんど使ったことがないです。 最初は4, 3, 2, 1と出力されたので ? となりましたが、細かく出力したり、数字を変えて見たりして、なんとかわかりました。
guest

0

  1. toStringで文字列化
  2. 文字数の長さを取得しforで回す
  3. substringで1文字ずつ取り出し、文字列→数値変換し足し込む

という形が一番シンプルだと思います。

投稿2018/04/25 11:24

m.ts10806

総合スコア80888

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

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

Nerd_run.

2018/04/25 11:56

その流れでやって見ます。 回答ありがとうございます。
退会済みユーザー

退会済みユーザー

2018/05/02 14:50 編集

3の一文字ずつ取り出すところはsubstringでもいいけどcharAtでもできます。 (ただし、戻り値はchar型であることに注意!!) http://java-code.jp/185
guest

0

ベストアンサー

こんにちは、
(i)最初の1234が変数の場合は、まず 文字列Stringに直す必要があります。

(ii)一文字ずつ分割した結果、得られる文字列をそれぞれ格納する配列を用意します。

(iii)split関数で文字列1234を分け(ii)で用意した配列に格納します。

(iv)for文で表示します。

以下、私が書いたソースコードを載せておきます。

Java

1public class Main{ 2 public static void main(String[] args){ 3 4 int num = 1234; 5 String str = Integer.toString(num); 6 String []resultArray = str.split(""); 7 for(int i = 0; i < resultArray.length; i++){ 8 System.out.println(resultArray[i]); 9 } 10 } 11}

<訂正>
与えられた文字列から求める場合

Java

1public class Main { 2 public static void main(String[] args){ 3 4 String line = "1234"; 5 String []hairetu = line.split(""); 6 int sum = 0; 7 for(int i = 0; i < 2; i++){ 8 sum += Integer.parseInt(hairetu[i * 2] + hairetu[i * 2 + 1]); 9 } 10 System.out.println(sum); 11 } 12 13} 14 15

与えられた変数から直接求める場合

Java

1public class Main { 2 public static void main(String[] args){ 3 4 int num = 1234; 5 int sum = num / 100 + num % 100; 6 System.out.println(sum); 7 } 8}

<追記>
2文字ずつ分けたい場合substringを使うこともできます。

Java

1public class Main { 2 public static void main(String[] args) throws Exception { 3 4 String num = "1234"; 5 String hairetu[] = new String[2]; 6 int sum = 0; 7 8 for(int i = 0; i < 2; i++){ 9 hairetu[i] = num.substring(i * 2,i * 2 + 2); 10 sum += Integer.parseInt(hairetu[i]); 11 } 12 System.out.println(sum); 13 } 14}

投稿2018/04/25 10:46

編集2018/05/03 02:59
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

Nerd_run.

2018/04/25 11:11

splitっていうのがあるんですね! 色々試してみます! ありがとうございます!
chankane

2018/04/25 11:20

補足です。 計算をしたいとのことですので、文字列から数値に変換してやる必要があります。具体的には、 (i) int型のresultArrayと同じ大きさの配列を用意する(resultArray2とします) (ii) for文の中で、resultArray2[i] = Integer.parseInt(resultArray[i]); を繰り返す result2はint型なので計算に使えます。 ところでコメント内にコード書けるんでしたっけ?
Nerd_run.

2018/04/25 11:55

コメント内には、パッと見た感じかけないっぽいです。 丁寧にありがとうございます。 参考にして、もっといいコードを書けるように精進いたします。
退会済みユーザー

退会済みユーザー

2018/04/26 03:11

chankaneさんのおっしゃるとおり、計算したいときは変数にパースする必要があります。 私が回答で(i)を書いたのは最初の文字列12,34などが入力で得られる文字列と想定した場合の 処理です。
Nerd_run.

2018/04/27 06:11

おかげさまで質問の内容の処理の仕方がわかりました。 ありがとうございます。 public class hoged{ public static void main(String[] args){ int num = 1234; String str = Integer.toString( num ); String []hairetu = str.split(""); int a = Integer.parseInt( hairetu[0] + hairetu[1] ); int b = Integer.parseInt( hairetu[2] + hairetu[3] ); System.out.println( a + b ); } }
退会済みユーザー

退会済みユーザー

2018/04/27 07:03 編集

それでもいけますが,もっと簡単に書く方法があるので、追記で書きました。
退会済みユーザー

退会済みユーザー

2018/04/27 07:02 編集

for文を使うと与えられる数字の桁数が何桁になっても大丈夫です。 for(String hairetu1 : hairetu) のところで巡回しています。
Nerd_run.

2018/04/27 09:29

拡張for文も使って見たんですが、質問の処理は上手くできなかったんです。 配列に入れて、すべて足す場合には有効なんですが、中途半端なところで区切って計算となると、二桁ごとに区切って計算する式がわからず、 配列に入れてから、計算してしまわないようにString型の状態で要素の0と1、2と3をくっつけて、くっつけたものをint型に変換、計算という流れになったのですが、この場合も拡張for文は使えるのでしょうか??
退会済みユーザー

退会済みユーザー

2018/04/28 01:54 編集

拡張for文を使って途中で終了するときはbreak文で終了させます。 http://java-lab.com/enhanced_for-break/ ただ、2桁ごとに区切って計算する方法なら他にもあるので2つほど載せました。
Nerd_run.

2018/04/29 20:30

? 失礼ながら、int型のまま繋げているのでどれも答えが違っています。
退会済みユーザー

退会済みユーザー

2018/04/30 03:41 編集

新しく書いた2つも結果が 3 7  と出ると思いますがどう違いましたか?
Nerd_run.

2018/05/01 20:10

わかりにくいですが、質問と、このコメント欄に書いたコードは、12 + 34 = 46 の計算をしています。
退会済みユーザー

退会済みユーザー

2018/05/02 14:44

誤解をしてすみません。 int a = Integer.parseInt( hairetu[0] + hairetu[1] ); int b = Integer.parseInt( hairetu[2] + hairetu[3] ); のところでhairetu[0] = 1, hairetu[1] = 2となり1 + 2 = 3と思いましたが hairetuは文字列なので足すとき文字列の連結で12になるのでした。 間違ったことを書いてすみませんでした。 (一番最初に回答したソースも別のものですね。)
退会済みユーザー

退会済みユーザー

2018/05/02 14:47

chicken-a_s.さんがコメント欄に書いた新しいソースを見て言いたかったことは 「与えられた文字列の長さ(つまり数字の桁数)が変わっても対応できる汎用的なものにするために 配列の番号を変数で指定すればfor文の条件文だけ変えて計算できる」ということです。 (なんかいろいろ誤解してすいません)
Nerd_run.

2018/05/02 15:23

こちらこそすみません。 質問の趣旨にはなんら支障はないのですが、結果が違うとコードも違ってくるので気になりましたm(_ _)m。 Starsさんが使っていた、↓のような書き方が自分では思いつけなかったので、汎用性を持った記述の仕方も勉強になりました。 長く付き合わせてしまって申し訳ありませんでした。 int []pow10 = {1000,100,10,1}; int sum = num / 100 + num % 100; sum += Integer.parseInt(hairetu[i * 2] + hairetu[i * 2 + 1]);
退会済みユーザー

退会済みユーザー

2018/05/03 03:08 編集

2桁ずつ区切るときsubstringを使うこともできることを思い出しました。 https://www.sejuku.net/blog/14503 また、1文字ずつ取り出すときcharAtを使うこともできます。 いつも、split関数ばかり使って忘れてました。混乱させてすみません
退会済みユーザー

退会済みユーザー

2018/05/03 03:02 編集

split関数を使うのは主に、空白区切りやコンマ区切るなどでした。 (例) "12 34" をhairetu[0] = "12" hairetu[1] = "34"など
退会済みユーザー

退会済みユーザー

2018/05/03 03:06

今回split関数で一文字ずつ取り出すことができたのは引数のところを""と何も指定しなかったからです。
退会済みユーザー

退会済みユーザー

2018/05/03 03:07

こちらこそ、いろんな勘違いをして、申し訳ありませんでした。
guest

0

参考情報

  • 【Java入門】String型(文字列)とchar型の相互変換まとめ

https://www.sejuku.net/blog/19544

  • nt型の数値を1つ1つ分割して配列に格納したい

https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q11147155106

jshell で一部を試してみます。

イメージ説明

投稿2018/04/25 14:38

katoy

総合スコア22328

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

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

Nerd_run.

2018/04/27 10:19 編集

回答ありがとうございます。 見てみます。
guest

0

Javaなど不要。そう、シェル芸ならね!

bash

1$ echo 1234 21234 3$ echo 1234|grep -o .|xargs 41 2 3 4 5$ echo 1234|grep -o .|xargs|tr ' ' '+' 61+2+3+4 7$ echo 1234|grep -o .|xargs|tr ' ' '+'|bc 810

投稿2018/04/25 10:47

hichon

総合スコア5739

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

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

Nerd_run.

2018/04/25 11:12

・・・( ・∇・) 何をしているかさっぱりですw
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.31%

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

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

質問する

関連した質問