Rumah > pembangunan bahagian belakang > Golang > Mengapakah `bufio.Reader.ReadString` Go Memelihara Pembatas Utama, dan Bagaimana Saya Boleh Mengelak Isu Ini?

Mengapakah `bufio.Reader.ReadString` Go Memelihara Pembatas Utama, dan Bagaimana Saya Boleh Mengelak Isu Ini?

Susan Sarandon
Lepaskan: 2024-12-18 05:10:11
asal
288 orang telah melayarinya

Why Does Go's `bufio.Reader.ReadString` Preserve Leading Delimiters, and How Can I Avoid This Issue?

Reader.ReadString Mungkin Mengekalkan Pembatas Utama

Dalam Go, gelagat bufio.Reader.ReadString boleh berbeza apabila menghuraikan input. Pertimbangkan senario berikut:

import (
    "bufio"
    "fmt"
    "os"
)

func main() {
    reader := bufio.NewReader(os.Stdin)
    fmt.Print("Who are you? Enter your name: ")
    text, _ := reader.ReadString('\n')
    if text == "Alice" || text == "Bob" {
        fmt.Printf("Hello, ", text)
    } else {
        fmt.Printf("You're not allowed in here!")
    }
}
Salin selepas log masuk

Di sini, ReadString digunakan untuk membaca input pengguna dan menjangkakan nama ditamatkan oleh aksara baris baharu. Walau bagaimanapun, apabila nama yang dimasukkan sepadan dengan "Alice" atau "Bob," program ini tersilap menafikan akses.

Punca dan Penyelesaian

Isu ini timbul kerana ReadString mengekalkan kejadian utama daripada pembatas (dalam kes ini, 'n'). Apabila nama seperti "Alice" dimasukkan, rentetan yang disimpan dalam teks termasuk kedua-dua "Alice" dan baris baharu yang mengekori. Watak baris baharu tambahan ini menghalang perbandingan rentetan daripada sepadan dengan nilai yang dijangkakan.

Untuk menyelesaikan isu ini, pertimbangkan pendekatan berikut:

  1. Pangkas Ruang Putih Utama: Sebelum membandingkan teks dengan "Alice" atau "Bob," gunakan rentetan.TrimSpace(teks) untuk mengalih keluar mana-mana ruang putih utama, termasuk baris baharu watak.
  2. Gunakan ReadLine Sebaliknya: Sebagai alternatif, tukar kepada reader.ReadLine() dan bukannya ReadString. Fungsi ini mengembalikan input tanpa menyertakan sebarang pembatas di hadapan atau di belakang. Ambil perhatian bahawa reader.ReadLine() akan mengembalikan bait; oleh itu, hantarkannya ke rentetan menggunakan rentetan(bait).

Atas ialah kandungan terperinci Mengapakah `bufio.Reader.ReadString` Go Memelihara Pembatas Utama, dan Bagaimana Saya Boleh Mengelak Isu Ini?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan