ホームページ  >  記事  >  バックエンド開発  >  Go で fmt.Scanln を使用してスペースで区切られた文字列を解析するにはどうすればよいですか?

Go で fmt.Scanln を使用してスペースで区切られた文字列を解析するにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-11-04 01:58:01512ブラウズ

How to Parse Space-Separated Strings with fmt.Scanln in Go?

fmt.scanln でスペース区切りの文字列を解析する方法

fmt.scanln は、標準入力から入力を読み取り、スキャンするために使用される関数です。それを構造化変数に変換します。ただし、スペースで区切られた文字列を読み取る場合、予期しない動作が発生する可能性があります。

デフォルトでは、fmt.scanln は最初の改行文字でスキャンを停止します。これにより、ユーザーがスペースで区切られた複数の単語を含む文字列を入力しても、最初の単語だけがキャプチャされるという状況が発生する可能性があります。

たとえば、次のコードを考えてみましょう。

<code class="go">package main

import "fmt"

func main() {
    var s string
    fmt.Scanln(&s)
    fmt.Println(s)
    return
}</code>

Whenユーザーが「月の 31」と入力すると、「31」だけが s 変数に取り込まれます。これは、fmt.scanln が空白文字であるスペース文字を検出した後にスキャンを停止するために発生します。

この問題を解決し、スペースで区切られた複数の単語をキャプチャするには、次のいずれかを実行できます。

  1. 複数の fmt.Scanln ステートメントを使用します:

    • このメソッドでは、fmt.Scanln を複数回呼び出して各単語を個別にキャプチャします。
    <code class="go">package main
    
    import "fmt"
    
    func main() {
        var s1 string
        var s2 string
        fmt.Scanln(&s1, &s2)
        fmt.Println(s1)
        fmt.Println(s2)
        return
    }</code>
  2. バッファ付きスキャナを使用します:

    • この代替案では、バッファ付きスキャナを使用して入力行全体を読み取り、スペースで区切られた単語。
    <code class="go">package main
    
    import (
        "bufio"
        "fmt"
        "os"
    )
    
    func main() {
        scanner := bufio.NewScanner(os.Stdin)
        for scanner.Scan() {
            s := scanner.Text()
            fmt.Println(s)
        }
        if err := scanner.Err(); err != nil {
            os.Exit(1)
        }
    }</code>

以上がGo で fmt.Scanln を使用してスペースで区切られた文字列を解析するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。