それぞれ 3 つの数字を含む複数行のテキスト ファイルがあります。各番号はスペースで区切ります。
1 1 4.0
ファイルからこの文字列を読み取るときに、最初の 2 つの数値を整数に変換し、最後の数値を double に変換します。どうすればこれを行うことができますか?
String [] numbers = "1 1 4.0".split(" ");
int first = Integer.parseInt(numbers[0]);
int second = Integer.parseInt(numbers[1]);
double third = Double.parseDouble(numbers[2]);
これは、数値が常にその形式であると想定しています。
説明
このString
クラスにはsplit
、正規表現を引数として取り、文字列を結果の配列に「分割」するメソッドがあります。次に、オブジェクト ラッパーを使用して、対応する配列値にアクセスし、文字列オブジェクトから適切にキャストすることで、数値を実際の値にする int
ことができます。double
各値を文字列配列の個々の要素として取得するには、最初に文字列をスペースで分割する必要があります。そのために使用する必要がありString#split
ます。
次に、配列を反復処理し、各要素について、dot(.)
.
が含まれている場合は、またはを使用しdot
て に変換します。double
Double#valueOf
Double#parseDouble
が含まれていない場合は、またはを使用してdot
変換します。integer
Integer#valueOf
Integer#parseInt
int
このアプローチを使用すると、double
値が格納される順序を気にする必要がなくなります。
例: -
String str = "21.3";
if (str.contains(".")) {
System.out.println(Double.parseDouble(str));
} else {
System.out.println(Integer.parseInt(str));
}
2 つの方法の違いは次のとおりです。
Integer.parseInt
を返しますが、primitive int
をInteger.valueOf
返しますInteger wrapper object
。
どうぞ:
String numberSequence = "1 1 4.0";
String[] numbers = numberSequence.split(" ");
for(String no : numbers){
if(no.contains(".")){
Double.parseDouble(no);
}
else{
Integer.parseInt(no);
}
}
次のようなものを試すことができます:
try {
int posStart = 0;
int posEnd = text.indexOf(" ", posStart);
int firstNumber = Integer.valueOf(text.substring(posStart, posEnd));
posStart = posEnd + 1;
posEnd = text.indexOf(" ", posStart);
int secondNumber = Integer.valueOf(text.substring(posStart, posEnd));
posStart = posEnd + 1;
double thirdNumber = Double.valueOf(text.substring(posStart));
System.out.println(firstNumber + " / " + secondNumber + " / " + thirdNumber);
}
catch (Exception err) {
System.out.println(err.getMessage());
}