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

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

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

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

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

解決済

3回答

2423閲覧

for文で配列に格納

Kobutachan

総合スコア13

Java

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

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

0クリップ

投稿2018/09/30 04:23

編集2018/09/30 15:44

for文を使って、テキストファイルから得た文字を lineSep[] という配列に入れたいです。

テキストファイルは何文字かわからないので、配列の大きさの設定ができないところでつまずいています。

java

1import java.nio.file.Files; 2import java.nio.file.Path; 3import java.nio.file.Paths; 4import java.util.List; 5public class Validator { 6 7public static void main(String[] args){ 8 9          Path input = Paths.get(args[0]); 10 List <String> character = null; 11 try { 12 character = Files.readAllLines(state); 13 } 14 catch(Exception e){ 15 //If the file was not found. 16 System.out.print("File IO issue"); 17 System.exit(1); 18 } 19 for (String c: character) { 20 String[] lineSep = c.split(" "); 21 for(String s: character) { 22 int checkChar = Integer.parseInt(lineSep[0]); 23 } 24 } 25 26} 27} 28
テキストファイル abc AbC bba

テキストファイルにアルファベットのみが入っているとは限りません。よって.length()は使えないです。

たとえテキストファイルが 
a 3 !
だとしても、全てを配列に入れたいです。

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

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

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

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

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

swordone

2018/09/30 14:41

stateって何?
Kobutachan

2018/09/30 15:16

この問題は、もう一つステートマシンーンを作るコードと組み合わせて提出する課題なので、この問題自体にはあまり関係ないです!消し忘れました。
Kobutachan

2018/09/30 15:18

ちなみにファイルは、アルファベットが入っているとは限らないです。
swordone

2018/09/30 15:25

アルファベットやそれ以外が混じったものからアルファベットだけ抜き出して配列に入れるということ?
swordone

2018/09/30 15:26

stateは関係ないということですが、stateを引数としてメソッドを起動してcharacterというListの変数を初期化しているので、関係ないどころかがっつり関係しています。
Kobutachan

2018/09/30 15:36

アルファベット以外が入っていた場合も、全て配列に入れたいです。
swordone

2018/09/30 15:37

じゃあこの質問の一文目は何ですか…
Kobutachan

2018/09/30 15:45

すみません よくよく考えた場合、アルファベット以外も入れる必要があったので、修正しました、、混乱させてしまってすみません。ご指摘ありがとうございます。
guest

回答3

0

ベストアンサー

全部を1つの配列に収めたいのでしょうか?
入ってる文字がアルファベット大文字小文字だけであるなら、length()で文字列の長さを取得し、その総合計を取って長さにすればいいのでは

java

1int sum = 0; 2for (String s : character) { 3 sum += s.length(); 4} 5String[] lineSep = new String[sum]; 6int i = 0; 7for (String s : character) { 8 String[] line = s.split(""); 9 for (String c : line) { 10 lineSep[i] = s; 11 i++; 12 } 13}

まあそもそもいったんListに入れて後から配列に入れるなりtoArray()するなりのほうが楽ですし

java

1List<String> temp = new ArrayList<>(); 2for (String s : character) { 3 temp.addAll(Arrays.asList(s.split(""))); 4} 5String[] lineSep = temp.toArray(new String[0]);

Filesとか使ってるのなら私だったらStreamにして一気に解決してしまいたい

java

1String[] lineSep = Files.lines(input).flatMap(s -> Arrays.stream(s.split(""))) 2 .toArray(String[]::new);

投稿2018/09/30 14:51

swordone

総合スコア20651

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

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

Kobutachan

2018/09/30 15:20 編集

アルファベットとは限らないです!数字でも記号でもあり得ます。 なので2番目のコードを参考にさせていただきます。ありがとうございます。
swordone

2018/09/30 15:23 編集

あ、アルファベット限定といったのは、サロゲートペアがあるとlength()が「文字の数」ではなくなってしまうのでその心配でした。普通の記号であればサロゲートペアではないと思うので問題ないかと。
guest

0

@seastar3さんの回答にもありますがこれで文字数不明な1行の全ての文字を1文字づつ配列に格納できます。

String[] lineSep = line.split("");

java

1import java.nio.charset.StandardCharsets; 2import java.nio.file.Files; 3import java.nio.file.Path; 4import java.nio.file.Paths; 5import java.util.List; 6 7public class memo_qa149272 { 8 public static void main(String[] args) { 9 Path path = Paths.get("C:\workspace\tmp\text.txt"); 10 List<String> allLine = null; 11 try { 12 allLine = Files.readAllLines(path, StandardCharsets.UTF_8); 13 } catch (Exception e) { 14 //If the file was not found. 15 System.out.print("File IO issue"); 16 System.exit(1); 17 } 18 for (String line : allLine) { 19 String[] lineSep = line.split(""); 20 for (String s : lineSep) { 21 System.out.print(s); 22 } 23 System.out.println(); 24 } 25 } 26} 27
これが何をするのか不明なのと今回の質問には無関係なので削除してます。 int checkChar = Integer.parseInt(lineSep[0]);

入力
イメージ説明

出力 abc AbC bba

投稿2018/09/30 09:14

opyon

総合スコア1009

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

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

Kobutachan

2018/09/30 15:19

とてもわかりやすいです!ありがとうございます。
guest

0

java

1String[] lineSep = c.split(" ");

の部分が、

java

1String[] lineSep = c.split("");

なら、一文字ずつ取り出せるでしょう。

投稿2018/09/30 08:02

seastar3

総合スコア2285

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問