2013-06-03 1 views
11

문자열을 다양한 방법으로 정수로 변환 할 수 있습니다.자바에서 int를 구문 분석하는 가장 좋은 방법

  • parseInt("-1",10)
  • Math.floor("-1")
  • "-1"|0
  • ~~"-1"

  • Number("-1")
  • I 가장 먼저 정규형 가정하지만, 예를 들어 은 int를 강제 변환하기 위해 세 번째를 사용합니다. 아마 더 많은 방법이있을 수 있습니다.

    각각의 차이점과 이점은 무엇입니까? 어느 것이 가장 빠를 것으로 예상됩니까?

  • +1

    모든 브라우저에서 원하는 결과를 얻으려면 parseInt에 기수를 추가하십시오. –

    +4

    [jsperf - 문자열을 정수로] (http://jsperf.com/str2intbench) – Sirko

    +0

    @Sirko 이것은 매우 유용한 링크입니다! 그것은'eval ("- 1")이 가장 느린 것 (멀리)이고, 산술 * 해킹 *이 가장 빠릅니다. 와우. 재미있는 대답으로 쉽게 전환 할 수 있습니다. – emesx

    답변

    8

    10 진수를 파싱하는 표준 방법은 parseInt(str, 10)입니다.

    에 대해서는 다른 솔루션 :

    • parseInt("-1") : 당신이 위험하게 살고 싶어 경우에만
    • Math.floor("-1") ("009" 소수점, 모든 일부 브라우저 가정) 사용 : 그것은 바닥 수 있습니다 아닌 INT ,하지만 그것이 올바른지 알고 싶다면
    • Number("-1") : 어쩌면 당신은 승진없이 메소드를 호출 할 수 있고 쓰레기가 없다고 확신 할 수있는 객체를 원할 것입니다. (Number('3 flowers') ==>NaN)
    • "-1"|0~~"-1" 및 암시 적 변환과 이진 연산의 다른 조합 : 코드 골프를 좋아하고 코드를 쉽게 유지 관리하는 것을 원하지 않습니다. (궁금한 사항 : 이진 연산은 숫자의 정수 부분을 차지함). Blender가 언급 한 바와 같이, 이러한 솔루션은 큰 (양수 또는 음수) 숫자에는 적합하지 않습니다.

    문자열에 int가 포함되어 있는지 확인할 필요가없는 경우 parseInt(str,10) 이외의 다른 솔루션을 사용하지 마십시오. 이것이 가장 빠른 솔루션이며, 더 중요한 것은 읽을 수있는 솔루션입니다. JS 엔진이 몇 가지 최적화 작업을 수행한다면 다른 솔루션보다 빠른 속도를 낼 이유가 없습니다.

    +6

    또한,''n "| 0'과'~~"n "'은'2^31 - 1'보다 큰 모든 숫자에 대해서는 실패합니다. ('-2^31-1 '보다 작다고 생각합니다. – Blender

    2

    단항 플러스는 어떻게됩니까? 그것은 특별히 유형 변환으로 설계된 것 같습니다.

    +"-1" // -1 
    
    관련 문제