1. ホーム
  2. java

[解決済み] 文字列配列から整数配列への変換

2022-03-05 05:49:22

質問

ということは、基本的にユーザーはスキャナ入力からシーケンスを入力することになります。 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]となります。


例外をキャッチしないことで、パフォーマンスを向上させることができる可能性があります ( これについては、この質問を参照してください。 ) と、有効な整数をチェックするために別のメソッドを使用します。