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

당신은 무엇을 기대 : 여기

은 1 - 라이너입니까? – alfasin

+0

"Street"이 있기 때문에 변환하지 않을 것입니다. 이 경우, 나는 그것을 붙잡고 계속하지 않겠는가? – craz1001

+1

long을 String [] 유형의 배열에 저장할 수 없습니다. 이러한 배열에는 String 만 포함될 수 있습니다. –

답변

3

당신은 String[]long를 넣을 수 없습니다 :이 아래의 예이다. long을 유지하기 위해 특별히 두 번째 배열을 생성해야합니다. 나는 "122 거리"가 정확하게 던지거나 잘못을 줄 것인지 확신 할 수 없다.

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. 긴 문자열을 변환하기 전에, 나는 그것이 같은 모금 잡는 예외가있는 파이썬과 같은 다른 언어와는 달리 자바에서 매우 비용이 많이 드는 예외를 (피하기 위해 숫자 만 가지고 검증 것 완벽하게 정상).
  2. 새로운 배열의 크기를 알 수있는 방법이 없기 때문에 null이 포함 된 배열은 이상적이지 않습니다. 결과를 수집하기 위해 List으로 작업 할 수 있으며 변환이 완료되면 변환 할 수 있습니다 나는 myArray의 자신의 새 긴 유형으로 이전 값을 교환 할 방법

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

저에게 설명 해주셔서 감사합니다. 고마워. – craz1001

0

Long의 배열로?

그렇지 않을 수도 있습니다. 배열의 길이는 Type입니다. string입니다. string 값만 허용됩니다. long 유형의 배열을 원하면 정확히 일치해야합니다. 그 타입의 다른 배열. 동일한 값이 내부에 저장됩니다.


다른 답변은 현재의 표현에서 기술적으로 올바르지 않습니다. 하나 longstring[] 배열에 넣을 수 있습니다. long 유형/형식에 없습니다.

리버스에서도 마찬가지입니다 (사용자가 원하는 것처럼 보임). 이전에 string 유형/형식이었던 long[] 데이터를 보유 할 수 있습니다. 적절한 전환 만하면됩니다. 다른 답변이 약간 오해


또 다른 것은, 기술적으로 더 이 숫자 형식과 문자열 사이, 단어의 진정한 의미에서,을 캐스팅하지 않습니다 있다는 것입니다. 대신 수행되는 것은 구문 분석입니다.

문제의 경우 특별히 long 값의 구문 분석은 string 표현은 long.valueOf(string s)을 사용하여 수행됩니다.

이 방법은 숫자 표현이 string이므로, 다른 것을 사용하여 NumberFormatException으로 실패합니다.

여기에는 "122 Street"이 포함됩니다. 그것은 숫자가 아닙니다. "122"입니다. 따라서 나머지 문자열 중에서 먼저 "122"을 구문 분석 한 다음이를 long으로 변환해야합니다.


솔루션 :

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

자바 배열은 그들이 저장하기 위해 선언 된 유형을 저장 (자바는 자바 스크립트를하지 않습니다). 당신이 긴으로 "122 거리"를 변환 할 때

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

니스! 나는 잠시 동안 자바에서 벗어났다. 그 이후로 내가 놓친 몇 가지 새로운 트릭이있는 것 같습니다. +1 – XenoRo

관련 문제