Goのstringは、不変のバイト列です。そのバイトが、必ずしも文字を表しているとは限りません。
文字列リテラルは、ダブルクォーテーションで囲んで定義します。
const name = "Jane"
文字列は、+演算子で連結できます。
"Jane" + " " + "Austen"
// => "Jane Austen"
タブを表す\tや、文字列中の改行を表す\nなど、一部の特殊文字は、先頭にバックスラッシュを付けてエスケープする必要があります。
"How is the weather today?\nIt's sunny"
// =>
// How is the weather today?
// It's sunny
stringsパッケージには、文字列を扱うための便利な関数がたくさんあります。
文字列関数について詳しくは、stringsパッケージのドキュメントを参照してください。
以下にいくつか例を示します。
import "strings"
// strings.ToLower returns the string given as argument with all its characters lowercased
strings.ToLower("MaKEmeLoweRCase")
// => "makemelowercase"
// strings.Repeat returns a string with a substring given as argument repeated many times
strings.Repeat("Go", 3)
// => "GoGoGo"
近くに「Tech Palace」という家電店があります。 店のオーナーは最近、マーケティングのメッセージを表示したり、お客さんが入口で会員カードをスキャンしたときに特別な挨拶を表示したりするための大きなディスプレイを設置しました。 このディスプレイはたくさんの小さなLEDライトでできていて、複数行のテキストを表示できます。
店のオーナーは、新しいディスプレイに表示するテキストを生成するコードについて、皆さんの助けを必要としています。
会員カードをスキャンするほとんどのお客さんには、"Welcome to the Tech Palace,"に続けてお客さんの名前を大文字で表示したいと、店のオーナーは考えています。
お客さんの名前をstring型の引数として受け取り、目的のメッセージをstring型として返す関数WelcomeMessageを実装してください。
WelcomeMessage("Judy")
// => Welcome to the Tech Palace, JUDY
店でたくさん買ってくれる常連のお客さん向けに、オーナーは、ウェルカムメッセージの前後に星の行を追加して、表示をもっと華やかにしたいと考えています。 星の行にいくつの星を入れるかはまだ決まっていないので、設定で変えられるようにしたいそうです。
ウェルカムメッセージ(string)と、1行あたりの星の数(int型)を引数として受け取る関数AddBorderを書いてください。
この関数は3行からなるstringを返します。指定された数の星の行、渡されたとおりのウェルカムメッセージ、そしてもう1行の星の行です。
AddBorder("Welcome!", 10)
これは次のような値を返します。
**********
Welcome!
**********
この新しいディスプレイを設置する前、店には似たようなディスプレイがありましたが、設定を変えられない固定の行しか表示できませんでした。 オーナーは、古いマーケティングメッセージのいくつかを新しいディスプレイで再利用したいと考えています。 しかし、そのデータにはすでに星の枠と、困ったことに余分な空白が含まれています。 メッセージを再利用できるように整えることが課題です。
古いマーケティングメッセージを文字列として受け取る関数CleanUpMessageを実装してください。
この関数は、まずテキストからすべての星を取り除き、その後、残ったテキストの先頭と末尾の空白を取り除きます。
そして、整えたメッセージを返します。
message := `
**************************
* BUY NOW, SAVE 10% *
**************************
`
CleanUpMessage(message)
// => BUY NOW, SAVE 10%