
前提・実現したいこと
StringクラスのAPIを使って、2つの数を半角スペースで分けてストリーム入力させ、値を取得したいです。
(例)1と2を取得するとき
1 2
発生している問題・エラーメッセージ
正規表現(splitやscannerなどのもの)を使わずに書きたいです。
//ストリーム入力させる BufferedReader read = new BufferedReader(new InputStreamReader( System.in)); String str = read.readLine(); String str2[] = str.split(" "); String str3[] = str.split(" "); read.close(); //strをそれぞれintに変換、int num1,int num2に代入 int input1 = Integer.parseInt(str2[0]); int input2 = Integer.parseInt(str3[1]);
試したこと
上記のソース(コンパイル・実行の作動確認済)を書きましたが、
どうしても正規表現に頼った書き方になってしまいます。
補足情報(FW/ツールのバージョンなど)
テキストエディタ(Windows、メモ帳)、コマンドプロンプト
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。


回答5件
0
Scannerを使えば良いんじゃないでしょうか。
Java
1try(Scanner sc = new Scanner(System.in)) { 2 int input1 = sc.nextInt(); 3 int input2 = sc.nextInt(); 4 5 ... 6}
泥臭い処理を裏で担ってくれる分、ハマると解消が面倒な面もありますが。
String#splitは利用するが、ローカル変数が減る方法。
Java
1int[] nums = Arrays.stream(str.split(" ")) 2 .mapToInt(Integer::parseInt) 3 .toArray() 4;
慣れるまでは読みづらいですけどね。
投稿2018/05/23 08:40
編集2018/05/23 09:16総合スコア35676
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

0
... 正規表現(splitなどのもの)を使わずに書きたい ...
一文字ずつ処理してみました。
java
1import java.io.BufferedReader; 2import java.io.IOException; 3import java.io.InputStreamReader; 4 5public class ParseInt { 6 public static void main(String[] args) { 7 try (BufferedReader br = new BufferedReader(new InputStreamReader(System.in))) { 8 String line = br.readLine(); 9 int n = 0; 10 for (char ch : line.toCharArray()) { 11 int p = "0123456789".indexOf(ch); 12 if (p >= 0) { 13 n = 10 * n + p; 14 } else { 15 System.out.println("read: " + n); 16 n = 0; 17 } 18 } 19 } catch (IOException e) { 20 e.printStackTrace(); 21 } 22 } 23}
実行例
工夫しだいで、 数式 "(1 + 2)*3" から 9 を得るように拡張していくこともできるはずです。
投稿2018/05/23 13:11
編集2018/05/24 13:47総合スコア22328
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

0
こんにちは、split
関数を使わない方法だと以下のような方法があります。
(i)replace
関数を使い空白を消す方法
.replace
関数を使い空白を消す方法があります。消去したらsubstring
で分けましょう。
(charAt
のほうが簡単ですが、質問欄にあるコードに合わせString型で出力したかったので
.substring
を使いました。)
Java
1import java.util.Scanner; 2 3public class Main { 4 public static void main(String[] args){ 5 Scanner sc = new Scanner(System.in); 6 String line = sc.nextLine(); 7 String line2 = line.replace(" ",""); 8 String []result = new String[line2.length()]; 9 for(int i = 0; i < line2.length(); i++){ 10 result[i] = line2.substring(i,i + 1); 11 System.out.println(result[i]); 12 } 13 } 14}
また、substring
で分ける方法以外でも整数に変換してデータを得る方法もあります。
(replace
で空白を消すところまでは同じです。)
(i)Integer.parse
で変数に変換する。
このとき、空白を消した後の文字列の長さは(i)によって変換された変数の桁数に等しいです。
(ii) for
文を使い配列にデータを格納する
10で割った余りを求め、それを配列に格納し、そのあと10で割る...
これを桁数分だけ繰り返します。
Java
1import java.util.Scanner; 2 3public class Main { 4 public static void main(String[] args){ 5 Scanner sc = new Scanner(System.in); 6 String line = sc.nextLine(); 7 String line2 = line.replace(" ",""); 8 int n = Integer.parseInt(line2); 9 int []result = new int[line2.length()]; 10 for(int i = 0; i < line2.length(); i++){ 11 result[line2.length() - i - 1] = n % 10; 12 n /= 10; 13 } 14 for(int i = 0; i < line2.length(); i++){ 15 System.out.println(result[i]); 16 } 17 } 18}
ちなみに
質問欄にあるコードですが 、split
関数を使う場合str2
とstr3
に分ける必要はありません。
一応、以下のコードでできます。
(入力されるデータの長さがいくらになっても対応できる汎用的なものにしました。)
Java
1import java.util.Scanner; 2 3public class Main { 4 public static void main(String[] args){ 5 Scanner sc = new Scanner(System.in); 6 String line = sc.nextLine(); 7 8 String []resultArray = line.split(" "); 9 10 for(int i = 0; i < (line.length() + 1) / 2; i++){ 11 System.out.println(resultArray[i]); 12 } 13 } 14}
投稿2018/05/23 12:17
編集2018/05/23 12:19
退会済みユーザー
総合スコア0
0
java
1 2String str = "1 2"; 3int spacePosition = str.indexOf(' '); 4int input1 = Integer.parseInt(str.substring(0, spacePosition)); 5int input2 = Integer.parseInt(str.substring(spacePosition + 1)); 6System.out.println("input1=" + input1); 7System.out.println("input2=" + input2);
投稿2018/05/23 09:53
総合スコア12
0
java
1String del = " "; 2int index = 0; 3while (index >= 0) { 4 int end = str.indexOf(del); 5 String elem = str.substring(0, end); 6 index = end + del.length(); 7}
こんな感じのこと?elemは配列か何かに入れないとだけど
投稿2018/05/23 09:44
総合スコア20675
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。