2017-10-22 2 views
-2

配列を反復処理して文字列をlongに変換しようとしますか?これは、以下の例である:ストリングをlongに変換する

String[] myArray = ["123", "122 Street", "2334"]; 
    // I'm trying to loop through an array like this and cast to a long 
for(String s: myArray) { 
    try { 
    long newValue = Long.valueOf(s); 
    // How would I swap the old values to their new long type in the 
    // myArray? 
    } catch(Exception error) { } 
} 
+0

あなたは何を期待しますか? – alfasin

+0

"Street"が入っているので、私はそれを変換するとは思わないでしょう。この場合、私はそれを捕まえて継続しないでしょうか? – craz1001

+1

long型をString型の配列に格納することはできません。そのような配列には文字列しか含めることができません。 –

答えて

3

あなたはString[]longを置くことはできません。 longを保持するための特別な配列を作成する必要があります。私は "122 Street"が正しくキャストされるか間違っているかどうかは分かりません。

String[] myArray = ["123", "122 Street", "2334"]; 
long[] longs = new long[myArray.length]; 
for (int i = 0; i < myArray.length; i++) { 
    try { 
    longs[i] = Long.valueOf(myArray[i]); 
    } catch (Exception e) { 
    // Handle error case 
    } 
}  
+0

'Long []'を使うと、 'null'を保つことができるので、あなたはもっと良いでしょう。それ以外は良い答えです、私はdownvoteを理解していません。 – dasblinkenlight

0
  1. longに文字列を変換する前に、私はそれが例外を上げてキャッチしたPythonなどの他の言語とは異なり、Javaで非常に高価である例外を(避けるために、数字だけを持っていることを確認したいです完全に正常)。
  2. 新しい配列のサイズを知る方法がなく、nullを含む配列が理想的でないため、Listを使用して結果を収集し、終了したら変換します私はmyarrayの中で彼らの新しいlong型に古い値を交換する方法を

public static void main(String[] args) { 
    String[] myArray = {"123", "122 Street", "2334"}; 
    Long[] array = stringsToLongs(myArray); 
} 

private static Long[] stringsToLongs(String[] myArray) { 

    List<Long> list = new LinkedList<>(); 
    for(String s: myArray) { 
     if (s.matches("\\d+")) 
      list.add(Long.valueOf(s)); 
    } 
    return list.toArray(new Long[list.size()]); 
} 
+1

私にそれを説明してくれてありがとう@alfasin。私はそれを感謝します – craz1001

0

Longの配列に?

あなたはそうではありません。あなたの配列はすでにTypestringです。それはstringの値しか受け入れられません。 相当のタイプの配列longが必要な場合は、正確にそれが必要になります。その型の異なる配列。同等の値が内部に格納されます。


その他の回答は現在の言葉では技術的に正しいものではありません。 1 longstring[]アレイに入れます。 longタイプ/フォーマットにはありません。

同じことが逆に適用されます(お望みのようです)。long[]のデータは、以前はstringタイプ/フォーマットになっています。あなたはちょうど適切な変換を行う必要があります。


他の回答がやや誤解もう一つは、をキャスト何は数値型と文字列の間で、言葉の本当の意味で、技術的には存在しないということです。その代わりに行われるのはと呼ばれ、と呼ばれます。

問題の場合は、具体的にはlongの値をstringの値から解析すると、long.valueOf(string s)が使用されます。

このメソッドは、数字の表現がstringであることを想定しており、何か別のものでNumberFormatExceptionで失敗することに注意してください。

これには"122 Street"が含まれます。それは数字ではありません。 "122"です。だから、longに変換する前に、残りの文字列のうち最初に"122"を解析する必要があります。


ソリューション:

String[] myArray = ["123", "122 Street", "2334"]; 
myArray[1] = myArray[1].substring(0,2); //Removes " Street" from second element. 
long[] myLongs = new long[myArray.length]; 
for(int i=0; i<myArray.length; i++) { 
    try { 
     myLongs[i] = Long.valueOf(myArray[i]); 
    } catch(NumberFormatException nfe) { 
     System.out.println("Element at index "+i+" could not be parsed."); 
    } catch(Exception ex) { 
     System.out.println("Some other exception happened."); 
    } 
} 
1

Javaの配列は、彼らだけが保存するために宣言されたタイプを保存する(JavaはJavaScriptのではありません)。

はここ1-ライナーです:あなたがロングに「122ストリート」を変換しようとすると

long[] numbers = Arrays.stream(myArray) 
    .filter(s -> s.matches("\\d+")) 
    .mapToLong(Long::parseLong) 
    .toArray(); 
+0

ニース!私はしばらくJavaから離れていました。それ以来私が見逃していたいくつかの新しいトリックがあるようだ。 +1 – XenoRo

関連する問題