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

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

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

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

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

Q&A

解決済

4回答

17358閲覧

[Java]ecripseでtextファイルから読み取った文字列を変換して配列に格納したい

monyu_

総合スコア7

Java

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

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

0グッド

1クリップ

投稿2017/05/13 07:40

編集2017/05/14 08:11

Eclipseでtextファイルから文字列を読み込んでそれを数値に変換し
新しい配列に格納したいのですがやり方がよくわかりません。

例えばテキストファイルに

text

11234,56,78901,234,5,678

という文字列があるときにこれを数値に変換して

data[]={1234,56,78901,234,5,678}

という風に格納したいです

java

1 try{ 2 BufferedReader br = new BufferedReader(new FileReader("f:\\Test\\MKDir\\test.txt")); 3 String s; 4 s=br.readLine(); 5 System.out.println(s); 6 br.close(); 7 8 //文字から数字に変換------------------- 9 char[] mj =new char[50]; 10 11 for(int i=1;i<s.length();i++){ 12 mj[i]= s.charAt(i); 13 data[i-1] = mj[i] - '0'; 14 } 15 //System.out.print(data[0]); 16 }catch(IOException e){ 17 System.out.println("ファイル読み込みエラー"); 18 }

いろいろ試してみたのですが”,”が来た時の処理の仕方がよくわかりません
説明が分かりにくかったかもしれませんがどうかご教授お願いします

追記

一応すべてのコードとエラーを書きます

java

1import java.io.BufferedReader; 2import java.io.File; 3import java.io.FileReader; 4import java.io.IOException; 5import java.io.PrintWriter; 6import java.util.ArrayList; 7 8public class GameMain { 9 10 public static void main(String[] args) { 11 // TODO 自動生成されたメソッド・スタブ 12 int[] data=new int[40]; 13 14 try{ 15 BufferedReader br = new BufferedReader(new FileReader("f:\\Test\\MKDir\\test.txt")); 16 String s; 17 s=br.readLine(); 18 System.out.println(s); 19 br.close(); 20 21 //文字から数字に変換------------------------------- 22 String[] numStrings = s.split(","); 23 ArrayList numbers = new ArrayList(); 24 25 for(String str : numStrings){ 26 str = str.trim(); 27 int num = Integer.parseInt(str);//33行目 28 numbers.add(num); 29 System.out.print(numbers); 30 } 31 //System.out.print(data[0]); 32 }catch(IOException e){ 33 System.out.println("ファイル読み込みエラー"); 34 } 35 } 36 37 /* 38 * フォルダーの製作 39 */ 40 public static void MKFolder(){ 41 File f = new File("f:\\Test\\MKDir"); 42 boolean r = f.mkdirs(); 43 System.out.println("結果= "+r); 44 } 45 46 /* 47 * テキストに文字列を書き込み 48 */ 49 public static void MKText(){ 50 try{ 51 PrintWriter pw = new PrintWriter("f:\\Test\\MKDir\\test.txt"); 52 pw.println("プログラムテスト"); 53 pw.println("プログラムテスト2"); 54 pw.close(); 55 System.out.println("書き込み成功"); 56 }catch(IOException e){ 57 System.out.println("ファイル書き出しエラー"); 58 } 59 } 60 61}

text

11234,5678,1,23,156,78912,345,6789,123
1234,5678,1,23,156,78912,345,6789,123 Exception in thread "main" java.lang.NumberFormatException: For input string: "1234" at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) at java.lang.Integer.parseInt(Integer.java:580) at java.lang.Integer.parseInt(Integer.java:615) at tnw.game.g29.GameMain.main(GameMain.java:33)

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

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

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

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

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

guest

回答4

0

ベストアンサー

Java

1... 2System.out.println(s); 3br.close(); 4 5String[] numStrings = s.split(","); 6ArrayList numbers = new ArrayList(); 7 8for(String str : numStrings){ 9 int num = Integer.parseInt(str); 10 numbers.add(num); 11} 12 13System.out.println(numbers); 14//[1234, 56, 78901, 234, 5, 678] 15

これでどうでしょうか?
","で先にsplitする方が簡単だと思います。

投稿2017/05/13 08:00

編集2017/05/13 08:10
honami

総合スコア308

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

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

wattaru

2017/05/13 08:09

int num = Integer.parseInt(str)に";"が漏れて?います
honami

2017/05/13 08:10

修正しました。ありがとうございます。
monyu_

2017/05/13 22:12

Exception in thread "main" java.lang.NumberFormatException: For input string: "1234" というエラーが出てしまいました 問題のあるコードは int num = Integer.parseInt(str); の場所らしいのですが解決方法がよくわかりません。 調べてみても問題なさそうのですがエラーが出てしまいます
honami

2017/05/14 02:09

このエラーでは原因がわかりません。"1234"が数値に変換出来る文字列ではない、というエラーですが、"1234"は見る限り正常な文字列です。 問題があるとすればtest.txt側に存在します。(for内で無効な文字列が渡されたときの例外処理を怠っている点を除いて) https://teratail.com/questions/60845 上のようにETXが混入し、"1234"上にはそれが表示されていないという可能性はないでしょうか?
monyu_

2017/05/14 07:56

for(String str : numStrings){ str = str.trim(); int num = Integer.parseInt(str); numbers.add(num); System.out.print(numbers); } ここにtrimを入れてみましたが同じエラーがでて来ました リンク先のzooeyさんの回答に再現不可能文字を表示してくれるエディターを使ったと書いてありますが使い方などわかりますか?調べてもでてなかったもので...
monyu_

2017/05/14 07:59

textファイルには 1234,5678,1,23,156,78912,345,6789,123 と書いています
honami

2017/05/14 09:27 編集

Xfceのmousepadというエディタだと思います。 ただ、こちらで追記のエラーのバイナリデータを見てみたところ"1234"の先頭に"EFBBBF"が含まれているようです。 これはUTF-8のByte of mark(通称BOM)と呼ばれるものです。(BOMについての説明は話がそれるので省きます) なので読み込んだファイル、または文字列に対して「先頭のBOMを取り除く」ような処理が必要になるようです。 BOMに関する回答はこのページの質問の趣旨と異なるので、その処理を行っているソースを下記に残しておくだけにとどめます。 【JAVA】BOM(Byte Of Mark)の手動除去ロジック http://rmrmrmarmrmrm.seesaa.net/article/401632047.html JavaでUTF-8のBOMに対処する http://k-hiura.cocolog-nifty.com/blog/2013/03/javautf-8bom-dd.html もし、引き続き問題が起こるようなら新たに「Javaのファイル操作におけるBOM処理について」のような形で質問を立ててください。そちらで対応します。 その方が同じ問題を抱える人の目にも止まりますので良いと思います。
monyu_

2017/05/14 10:46 編集

Windowsのメモ帳などだと先頭にBOMがついてしまうというのは初耳でした 今回はメモ帳ではなく別のエディターを使うという方法で対処します 時間があるときにBOMの解除の仕方など覚えようと思います 丁寧に教えてもらいありがとうございます
guest

0

s.charAt(i)の部分で、iを1から始めていますが、文字列の最初から取り出したいのであれば
iは0から始めないと2文字目から取り出されてしまいます。

プログラミングでは配列や関数で要素の位置が、0から始まるのはよくあることです。

投稿2017/05/13 08:03

wattaru

総合スコア76

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

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

0

現在の記述内容ですと、読み込んだファイルの行:1234,56,78901,234,5,678を
配列dataに1文字ずつ読み込んでいるようです。
例:[1,2,3,4,・・・]←","のところでエラー

単純に読み込んだ行をカンマ(,)単位で分割して配列化したいのであれば

java

1String[] strs = s.split(",", 0);

のようにすればカンマ区切りで配列に格納できます。
その後各配列の要素をInteger.parseInt(str)とかで数値に変換すればいいとおもいます。

投稿2017/05/13 07:58

wattaru

総合スコア76

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

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

0

dataはint配列でしょうか?

java

1data = Arrays.stream(s.split(",", 0)).mapToInt(Integer::parseInt).toArray();

投稿2017/05/13 17:45

swordone

総合スコア20649

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問