हर डेवलपर से परिचित समस्या
\n\nकल्पना करें: आप एक लॉग पार्सर लिख रहे हैं, फॉर्म से उपयोगकर्ता इनपुट प्रोसेस कर रहे हैं, या API के लिए डेटा तैयार कर रहे हैं। स्ट्रिंग्स शुरुआत और अंत में अतिरिक्त स्पेस के साथ आती हैं। यदि उन्हें नहीं हटाया गया — तो बग, टूटी हुई तुलनाएं, गलत JSON और डीबगिंग के घंटे बर्बाद होंगे। यह एक क्लासिक समस्या है, जिसने Stack Overflow पर हज़ारों व्यूज़ जुटाए हैं। आज हम इसे Go में हल करेंगे — तेज़, सुरुचिपूर्ण और बिना किसी आश्चर्य के।
\n\nइस गाइड में आप सीखेंगे:
\n- \n
- स्पेस हटाने के लिए मानक लाइब्रेरी
stringsका उपयोग कैसे करें। \n TrimSpace,TrimLeftऔरTrimRightमें क्या अंतर है। \n - गैर-मानक whitespace वर्णों के लिए अपना कस्टम फ़ंक्शन कैसे लिखें। \n
- Unicode और टैबुलेशन के साथ गलतियों से कैसे बचें। \n
चलिए शुरू करते हैं!
\n\nत्वरित शुरुआत: strings.TrimSpace
\n\nस्ट्रिंग के दोनों सिरों से स्पेस हटाने का सबसे सरल और लोकप्रिय तरीका मानक पैकेज strings से फ़ंक्शन strings.TrimSpace का उपयोग करना है। यह उन सभी वर्णों को हटाता है जिन्हें Go "स्पेस" (whitespace) मानता है: सामान्य स्पेस, टैब, नई लाइनें, कैरिज रिटर्न और यहां तक कि वर्टिकल टैब भी।
कोड में यह इस तरह दिखता है:
\n\npackage main\n\nimport (\n "fmt"\n "strings"\n)\n\nfunc main() {\n raw := " नमस्ते, दुनिया! \\n\\t"\n cleaned := strings.TrimSpace(raw)\n \n fmt.Printf("मूल: %q\\n", raw)\n fmt.Printf("साफ़: %q\\n", cleaned)\n}\n\n\nआउटपुट:
\nमूल: " नमस्ते, दुनिया! \\n\\t"\nसाफ़: "नमस्ते, दुनिया!"\n\n\nध्यान दें: fmt.Printf में %q स्ट्रिंग को escape-अनुक्रमों के साथ दिखाता है — यह डीबगिंग के लिए सुविधाजनक है, ताकि छिपे हुए वर्णों को देखा जा सके।
कब उपयोग करें: 90% मामलों में यह पर्याप्त है। यदि आपको बस स्ट्रिंग के किनारों से अनावश्यक वर्ण हटाने हैं — तो TrimSpace का उपयोग करें।
बारीक ट्यूनिंग: TrimLeft और TrimRight
\n\nकभी-कभी केवल बाएं या केवल दाएं से स्पेस हटाने की आवश्यकता होती है। इसके लिए Go में strings.TrimLeft और strings.TrimRight हैं। लेकिन एक बारीकी है: ये डिफ़ॉल्ट रूप से "स्पेस वर्णों" के साथ नहीं, बल्कि दिए गए वर्णों के सेट के साथ काम करते हैं।
उदाहरण:
\n\npackage main\n\nimport (\n "fmt"\n "strings"\n)\n\nfunc main() {\n s := " \\t\\n हैलो "\n \n // केवल बाएं से हटाएं (स्पेस, टैब, नई लाइनें)\n left := strings.TrimLeft(s, " \\t\\n")\n fmt.Printf("बाएं: %q\\n", left)\n \n // केवल दाएं से हटाएं (केवल स्पेस)\n right := strings.TrimRight(s, " ")\n fmt.Printf("दाएं: %q\\n", right)\n}\n\n\nआउटपुट:
\nबाएं: "हैलो "\nदाएं: " \\t\\n हैलो"\n\n\nमहत्वपूर्ण: TrimLeft और TrimRight दूसरे आर्गुमेंट के सभी वर्णों को तब तक हटाते हैं जब तक उन्हें कोई ऐसा वर्ण नहीं मिलता जो उसमें नहीं है। यदि आप केवल स्पेस " " निर्दिष्ट करते हैं, तो टैब \\t अछूता रहेगा।
एक तरफ के लिए TrimSpace का एनालॉग
\n\nयदि आपको केवल बाएं या केवल दाएं से सभी whitespace हटाने की आवश्यकता है, लेकिन सभी वर्णों को सूचीबद्ध करने में आलस आता है, तो आप एक छोटा रैपर लिख सकते हैं:
\n\nfunc trimLeftSpace(s string) string {\n return strings.TrimLeft(s, " \\t\\n\\r\\v\\f")\n}\n\nfunc trimRightSpace(s string) string {\n return strings.TrimRight(s, " \\t\\n\\r\\v\\f")\n}\n\n\nया, संक्षिप्तता पसंद करने वालों के लिए, एक तरकीब के साथ strings.TrimSpace का उपयोग करें:
// केवल बाएं से हटाएं: पहले रिवर्स करें, फिर TrimSpace, फिर वापस रिवर्स करें\nfunc trimLeftSpace(s string) string {\n runes := []rune(s)\n for i, r := range runes {\n if !unicode.IsSpace(r) {\n return string(runes[i:])\n }\n }\n