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

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

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

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

Q&A

4回答

2309閲覧

2,,,,,,をsplit使用時の,,の判定がわかりません

mpv

総合スコア7

Java

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

0グッド

0クリップ

投稿2016/07/31 13:55

###前提・実現したいこと
ここに質問したいことを詳細に書いてください

1,10,8,8,10,8,10
2,,,,,,

上の各行をの合計を出したいのですが
2番の,,にnullが入ると思うんですが判定の仕方がわかりません。

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

エラー: シンボルを見つけられません if(intvalues.isEmpty){ ^ シンボル: 変数 isEmpty 場所: タイプIntegerの変数 intvalues GradeChecker2.java:91: エラー: 型の開始が不正です if(intvalues.isEmpty){ ^ エラー2個

###該当のソースコード

java

1 void assignments(String arg) throws IOException { 2 File file = new File(arg); 3 String line; 4 String[] values; 5 6 BufferedReader in = new BufferedReader(new FileReader(file)); 7 8 Integer i=1; 9 Integer sum=0; 10 //Integer num; 11 12List<Integer> point = new ArrayList<Integer> (); 13List<Integer> pointsum = new ArrayList<Integer>(); 14 15 while((line = in.readLine()) != null) { 16 values = line.split(",",-1); 17 for(String value : values){ 18 Integer intvalues = new Integer(value); 19 if(intvalues.isEmpty){ 20 intvalues=0; 21 } 22 System.out.println(intvalues); 23 point.add(intvalues); 24 } 25 for(Integer points : point){ 26 sum+=points; 27 } 28 sum = sum - i;//IDの分を引く 29 i++; 30 31 pointsum.add(sum); 32 System.out.println(pointsum); 33 sum=0; 34 } 35 36 // for(Integer pointsums : pointsum){ 37 // System.out.println(pointsums); 38 //System.out.println(""); 39// } 40 41 }

###試したこと
if文で判定をしたいのですが if(intvalues==null) や if(intvalues.isEmpty) を試したのですがうまく2番でループが止まってしまいます。

###補足情報(言語/FW/ツール等のバージョンなど)
より詳細な情報

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

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

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

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

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

guest

回答4

0

これはループが止まる以前にコンパイルエラーでは?
当該コードではIntegerクラスのisEmptyなる変数にアクセスしようとしていますがそんなものはありません。
メソッドだとしてもisEmptyというメソッドはありません。OptionalIntなどと勘違いしていませんか?

###2行目に入った際にエラーになる原因
例外が出るはずなのでそれをきちんと読めば原因はわかるはずですが…
2行目はsplitの結果の要素に""が入ります。これをparseIntしようとするのですが、数値解釈できないので例外が発生します。これが「ループが止まる」原因です。
このような状態が「最後だけ」出るのであれば、splitの引数に0を指定すれば後続の空文字要素はなくなるので、エラーが出なくなるかと思います。

投稿2016/07/31 14:00

編集2016/07/31 14:11
swordone

総合スコア20651

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

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

mpv

2016/07/31 14:05

解答ありがとうございます。 isEmptyの場合はエラーがでてしまいます if(intvalues==null)の場合はエラーは出ないんですが1の行の合計は出るんですが 2の行に入ったところでループが止まってしまいます。 なぜだかわかりますでしょうか。
guest

0

java

1String[] s = "2,,,,".split(","); 2for(int n = 0; n < s.length; n++){ 3 System.out.println(n + ":" + s[n]); 4}

結果
0:2

つまり、nullでも""でもなく配列が作られません。
配列のサイズ=1です。

投稿2016/07/31 14:12

intelf___

総合スコア868

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

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

intelf___

2016/07/31 14:18

String[] s = "2,,,3,".split(","); これは、 0:2 1: 2: 3:3 という結果に。nullならそう表示されるので、 new String[]{"2", "", "", "3"} と等しい配列になっているはずです。 if(s[n].equals("") == false){文字があるときの処理} もしくは if(s[n].length() != 0){文字があるときの処理} のように判定するといいでしょう。
guest

0

  1. java.lang.Integer には isEmpty というプロパティがない。
  2. java.lang.Integer には isEmpty というメソッドがない。また PHP 等のように () を省略してはいけない
  3. java.lang.Integer に変換する場合は valueOf メソッドを利用する。
  4. java.lang.Integer に変換する場合は java.lang.String のメソッド matches 用いて数値か判別する必要がある.

正規表現 /^$d+$/

投稿2016/07/31 14:07

asahina_dev

総合スコア610

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

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

0

数値にする前、つまり value の段階で判定すればいいのではないですか?

投稿2016/07/31 14:05

Zuishin

総合スコア28660

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

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

mpv

2016/07/31 14:12

List<Integer> point = new ArrayList<Integer> (); List<Integer> pointsum = new ArrayList<Integer>(); while((line = in.readLine()) != null) { values = line.split(",",-1); for(String value : values){ if(value == null){ Integer intvalues = new Integer(value); intvalues=0; } Integer intvalues = new Integer(value); System.out.println(intvalues); point.add(intvalues); } for(Integer points : point){ sum+=points; } sum = sum - i;//IDの分を引く i++; pointsum.add(sum); System.out.println(pointsum); sum=0; } // for(Integer pointsums : pointsum){ // System.out.println(pointsums); //System.out.println(""); // } } に変更したところ 出力結果は 1 10 8 8 10 8 10 [54] 2 Exception in thread "main" java.lang.NumberFormatException: For input string: "" at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) at java.lang.Integer.parseInt(Integer.java:592) at java.lang.Integer.<init>(Integer.java:867) at GradeChecker2.assignments(GradeChecker2.java:94) at GradeChecker2.getvalue(GradeChecker2.java:17) at GradeChecker2.main(GradeChecker2.java:119) となりました。 やはり2の行にいくとループがとまってしまいます。 難しい> <
Zuishin

2016/07/31 14:27

null じゃなくて空文字列じゃないですか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問