[解決済み] 文字列配列から整数配列への変換
質問
ということは、基本的にユーザーはスキャナ入力からシーケンスを入力することになります。
12, 3, 4
など。
長さは問わないが、整数でなければならない。
文字列入力を整数配列に変換したい。
そこで
int[0]
は
12
,
int[1]
は
3
など。
何かヒントやアイデアがあれば教えてください。私は
if charat(i) == ','
前の番号を取得し、それらを一緒にパースし、配列内の現在の利用可能なスロットに適用します。しかし、私はそれをどのようにコード化するのかよく分からない。
どのように解決するのですか?
スキャナから入力行全体を読み込んで、その行を
,
を指定すると
String[]
に、各数値をパースして
int[]
を1対1でマッチングさせる...(有効な入力で
NumberFormatExceptions
のようになります。
String line = scanner.nextLine();
String[] numberStrs = line.split(",");
int[] numbers = new int[numberStrs.length];
for(int i = 0;i < numberStrs.length;i++)
{
// Note that this is assuming valid input
// If you want to check then add a try/catch
// and another index for the numbers if to continue adding the others (see below)
numbers[i] = Integer.parseInt(numberStrs[i]);
}
として YoYoの回答 が示唆するように、上記はJava 8でより簡潔に実現することができます。
int[] numbers = Arrays.stream(line.split(",")).mapToInt(Integer::parseInt).toArray();
無効な入力に対応するため
この場合、何が必要かを考える必要があります。その要素で不正な入力があったことを知らせたいのか、それとも単にそれをスキップしたいのか。
無効な入力について知る必要がなく、ただ配列のパースを続けたい場合は、次のようにします。
int index = 0;
for(int i = 0;i < numberStrs.length;i++)
{
try
{
numbers[index] = Integer.parseInt(numberStrs[i]);
index++;
}
catch (NumberFormatException nfe)
{
//Do nothing or you could print error if you want
}
}
// Now there will be a number of 'invalid' elements
// at the end which will need to be trimmed
numbers = Arrays.copyOf(numbers, index);
配列の末尾にある無効な要素を削除する必要があるためです。
int[]
が表現されます。
0
という有効な入力値を区別するために、これらを削除する必要があります。
0
.
の結果
入力: "2,5,6,bad,10"。
出力する。[2,3,6,10]
無効な入力について後で知る必要がある場合は、次のようにすることができます。
Integer[] numbers = new Integer[numberStrs.length];
for(int i = 0;i < numberStrs.length;i++)
{
try
{
numbers[i] = Integer.parseInt(numberStrs[i]);
}
catch (NumberFormatException nfe)
{
numbers[i] = null;
}
}
この場合、不正な入力(有効な整数ではない)は、要素がnullになります。
結果
入力: "2,5,6,bad,10"。
出力する。[2,3,6,null,10]となります。
例外をキャッチしないことで、パフォーマンスを向上させることができる可能性があります ( これについては、この質問を参照してください。 ) と、有効な整数をチェックするために別のメソッドを使用します。
関連
-
[解決済み] Eclipseでクラスとそれに対応するファイルの名前を変更する方法は?
-
[解決済み] Java: getInstanceとStaticの比較
-
[解決済み] JavaScriptで文字列が部分文字列を含むかどうかを確認する方法は?
-
[解決済み] C#のStringとstringの違いは何ですか?
-
[解決済み] JavaでInputStreamを読み込んでStringに変換するにはどうすればよいですか?
-
[解決済み] なぜパスワードにはStringではなくchar[]が好まれるのですか?
-
[解決済み] JavaでStringをintに変換するにはどうしたらいいですか?
-
[解決済み] JavaScriptで文字列を整数に変換する方法は?
-
[解決済み] Pythonで整数から文字列に変換する
-
[解決済み】JavaScriptで文字列の出現箇所をすべて置換する方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Java - JTextFieldが空かどうかを確認する
-
[解決済み] ボタンでTextFieldをクリアする(Java)
-
[解決済み] 警告: コンテキスト初期化中に例外が発生 - 更新の試みはキャンセルされました。
-
[解決済み] double 型を Int 型に変換、切り捨て
-
[解決済み] eclipseからTomcatに物理的に発行されるmyjspはどこにあるのでしょうか?
-
[解決済み] Java の文字列インデックスが範囲外です。0 [閉店]
-
[解決済み] publicId と systemId の間に空白が必要です。
-
[解決済み] init-paramとcontext-param
-
[解決済み] IntegerからBigIntegerへの変換
-
[解決済み】JavaでStringが整数を表すかどうかを確認する最良の方法は何ですか?