2017-01-11 3 views
-2

문자열의 n 번째 문자가없는 경우 첫 번째 n 개의 문자를 문자열의 부분 문자열로 반환하는 가장 좋은 방법은 문자열 자체를 반환하는 것입니다.문자열의 첫 번째 n 문자를 반환합니다.

나는 다음과 같은 작업을 수행 할 수

:

func firstN(s string, n int) string { 
    if len(s) > n { 
      return s[:n] 
    } 
    return s 
} 

하지만 청소기 방법이?

BTW, 스칼라에서 나는 단지 s take n을 할 수 있습니다.

+2

아니, 이동하지 않습니다 스칼라. ''n '은'firstN (s, n)'보다 어떻게 "더 깨끗합니다"? – JimB

+1

숯불이라고 할 때, 당신은 바이트 또는 룬을 의미합니까? 첫 번째 N 바이트를 반환하는 것이 목표 인 경우 질문의 코드가 좋게 보입니다. 첫 번째 N 개의 룬을 반환하려면 루프가 필요합니다. –

답변

0

나를 깨끗하게 보입니다. 나는 똑같은 일을 할 것이다.

fmt.Println(firstN("世界 Hello", 1)) // � 

는 당신이 다음과 같은 방법으로 기능을 수정할 수 있습니다 유니 코드로 작업하려면 : 당신은 유니 코드와 함께 일하고 싶어하지 않는

2

귀하의 코드는 괜찮

// allocation free version 
func firstN(s string, n int) string { 
    i := 0 
    for j := range s { 
     if i == n { 
      return s[:j] 
     } 
     i++ 
    } 
    return s 
} 
fmt.Println(firstN("世界 Hello", 1)) // 世 

// you can also convert a string to a slice of runes, but it will require additional memory allocations 
func firstN2(s string, n int) string { 
    r := []rune(s) 
    if len(r) > n { 
     return string(r[:n]) 
    } 
    return s 
} 
fmt.Println(firstN2("世界 Hello", 1)) // 世 
관련 문제