2017-01-11 22 views
-2

最初のn個の文字を文字列の部分文字列として返す最善の方法は、文字列にn個の文字がない場合は文字列自体を返します。文字列の最初のn個の文字を返します。

私は、次の操作を行うことができます

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

が、きれいな方法はありますか?

ところで、スカラでは、私はちょうどs take nを行うことができます。

+2

いいえ、Goはありませんスカラ。 '' n 'は 'firstN(s、n)'よりどのように「よりクリーン」ですか? – JimB

+1

あなたがcharと言うとき、あなたはbyteかruneを意味しますか?最初の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)) // 世 
関連する問題