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

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

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

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

Q&A

解決済

2回答

2086閲覧

paizaというサイトについて

Gatmaster

総合スコア13

Java

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

2グッド

0クリップ

投稿2016/07/07 14:18

paizaというプログラミングの練習サイトで問題を解いている時、少しおかしな点を発見しました。
macのターミナルで下記のようなコード(java)を実行すると

java

1import java.io.*; 2 3public class Maink { 4 public static void main(String[] args) throws Exception { 5 BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 6 7 String line = br.readLine(); 8 String[] lin = line.split("",0); 9 10 for(int i=0; i<lin.length; i++){ 11 System.out.println(lin[i]); 12 } 13 } 14}

入力
1234

出力





というように
lin[0]=空白、lin[1]=1、lin[2]=2、lin[3]=3、lin[4]=4
となります。

しかし、paizaでは
lin[0]=1、lin[1]=2、lin[2]=3、lin[3]=4
となります。

macのターミナルでやるからおかしいのか、それともpaizaの方がおかしいのか
それともどっちも正しいのか・・・

splitについて理解を深めたいと感じたため質問させていただきました

A-pZ👍を押しています

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

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

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

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

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

guest

回答2

0

ベストアンサー

(追記)

この現象は、(おそらくApple製の)Java6で実行した場合に
発生することが分かりました。

詳細は、コメント欄をご覧ください。


(最初の回答)

読み取ったデータをいったん表示してみれば一目瞭然だと思います。
こんな感じで。

lang

1String line = br.readLine(); 2System.out.printf("input=[%s]%n", line);

input=[1234]のように出力される場合、先頭にスペースが無いので、
lin[0]=1、lin[1]=2、lin[2]=3、lin[3]=4となるのが正解です。

投稿2016/07/08 00:27

編集2016/07/08 14:28
argius

総合スコア9388

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

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

Gatmaster

2016/07/08 12:59

macのターミナルでinput=[1234]となりましたが 出力は空白、1、2、3、4となりました line.split("",0); ではどうしても先頭に空白を含んでしまいますね・・・これは仕様なのでしょうか・・・
argius

2016/07/08 13:21

私もMacのターミナルで動かしてみましたが、 そういう現象は起きず、 input=[1234], lin[0]=1、lin[1]=2、lin[2]=3、lin[3]=4 になりました。 Windowsでもこうなるので、 スペースが入る挙動は仕様では無いと思います。 Javaなので環境にかかわらず同じ結果にならないとおかしいですから。 もしかしたら、MacのバージョンやJavaのバージョンで異なるかも知れません。 私の環境は El Capitan(10.11.4) + Java8(1.8.0_25)です。 ターミナルでは、コンパイル後、 java Maink で実行しているのですよね? あとは、念のため ・コードが掲載されたものと本当に同じかどうか ・いったん修正した後で再コンパイルを忘れていないかどうか を確認してみて下さい。
Gatmaster

2016/07/08 13:51

私の環境はYosemite(10.10.3)、java(1.6.0.65)です ・コードが掲載されたものと本当に同じかどうか ・いったん修正した後で再コンパイルを忘れていないかどうか ・java Mainkで実行しているかどうか ちゃんと確認しましたが、lin[0]に空白が入ってしまいます やはりバージョンの問題でしょうか・・・調べてみます 何度も答えてくださり、本当にありがとうございます
argius

2016/07/08 14:08 編集

なるほど、Java6でしたか。 それも、おそらくApple製のJavaですね。 私の環境にもJDK1.6.0_65が入っていたのでそちらで確認したところ、 再現しました。 ちゃんと調べてませんが、これはバグなんじゃないですかね。 独自の正規表現ライブラリーを使っているとか何らかの理由で、 正規表現関連処理の挙動が違うのかも知れません。 Java6というのはかなり古いバージョンです。 特に理由が無ければ、 挙動が怪しく、古いバージョンのAppleJavaを使用するよりも、 Oracle社が提供する新しいバージョンのJava(Java8)を使ったほうが良いでしょう。
Gatmaster

2016/07/08 14:17

うわあああああああ java8にしたら治りました!!!!! すっごくスッキリしました!!! バージョンの問題だったようですね^^ お付き合いさせてしまい申し訳ありません ありがとうございました!!!
argius

2016/07/08 14:22

解決できて良かったです。 実際の原因はJava環境の種類でしたので、 その旨を回答欄に記載しておきますね。
guest

0

入力の「1234」の前に
空白がなければpaizaが正しく、
空白があればlin[0]に空白が入るのが正しいです。

投稿2016/07/07 15:35

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問