গো-এ স্পেসে একটি স্ট্রিং বিভক্ত করবেন?


115

একটি ইনপুট স্ট্রিং দেওয়া যেমন " word1 word2 word3 word4 ", গো-তে স্ট্রিংগুলির অ্যারের হিসাবে এটিকে বিভক্ত করার জন্য সেরা পন্থাটি কী হবে? নোট থাকতে পারে যে কোনো প্রতিটি শব্দ মধ্যে স্পেস বা ইউনিকোড-ব্যবধান অক্ষরের সংখ্যা।

জাভাতে আমি কেবল ব্যবহার করব someString.trim().split("\\s+")

(দ্রষ্টব্য: গোতে নিয়মিত এক্সপ্রেশন ব্যবহার করে ডুপ্লিকেট স্প্লিট স্ট্রিং কোনও ভাল মানের উত্তর দেয় না Please দয়া করে একটি সত্যিকারের উদাহরণ দিন regexpবা stringsপ্যাকেজ রেফারেন্সের কোনও লিঙ্ক নয় ।)

উত্তর:


248

stringsপ্যাকেজের মাধ্যমে একটি হয়েছে Fieldsপদ্ধতি।

someString := "one    two   three four "

words := strings.Fields(someString)

fmt.Println(words, len(words)) // [one two three four] 4

ডেমো: http://play.golang.org/p/et97S90cIH

ডক্স থেকে:

func Fields(s string) []string

ক্ষেত্রগুলি sএক বা একাধিক পরপর সাদা স্পেস অক্ষরের প্রতিটি উদাহরণের চারপাশে স্ট্রিংকে বিভক্ত করে , সাবস্ট্রিংগুলির একটি অ্যারে sবা খালি তালিকায় ফিরে আসে যদি এর মধ্যে কেবল সাদা স্থান থাকে।


1
দুর্ভাগ্যক্রমে, strings.Fieldsউদ্ধৃত অংশগুলিতে ফাঁকা স্থানগুলি উপেক্ষা করবেন না।
chmike

সত্য @chmike, কিন্তু মুহূর্ত কোট জড়িত পেতে, আপনি ব্যবসায় আছো ডিকোডিং বা পার্স কিছু নির্দিষ্ট এনকোডিং বা বিন্যাস
mtraceur

@ chmike আপনার প্রয়োজন হতে পারে shlexসেই Godoc.org/github.com/google/shlex
আখি

8

আপনি যদি টিপ ব্যবহার করছেন: regexp.Split

func (re *Regexp) Split(s string, n int) []string

বিভেদ দ্বারা পৃথক করা সাবস্ট্রিংগুলিতে স্লাইসগুলি বিভক্ত করুন এবং এই এক্সপ্রেশন ম্যাচের মধ্যে সাবস্ট্রিংগুলির একটি স্লাইস প্রদান করে।

এই পদ্ধতিতে ফিরে আসা স্লাইস ফাইন্ডএলস্ট্রিং দ্বারা ফেরত ফালিটিতে থাকা সমস্ত এস সাবস্ট্রিংগুলি নিয়ে গঠিত। যখন কোনও এক্সপ্রেশনকে ডেকে পাঠানো হয় যেখানে কোনও মেটাচ্যাকার্টার নেই, এটি স্ট্রিংগুলির সমতুল্য pস্প্লিটএন।

উদাহরণ:

s := regexp.MustCompile("a*").Split("abaabaccadaaae", 5)
// s: ["", "b", "b", "c", "cadaaae"]

গণনা প্রত্যাবর্তনের জন্য সাবস্ট্রিংয়ের সংখ্যা নির্ধারণ করে:

n > 0: at most n substrings; the last substring will be the unsplit remainder.
n == 0: the result is nil (zero substrings)
n < 0: all substrings

3
এই একটি Overkill মত মনে হয়
thwd

@ টম তবে এটি এখানে সেরা উত্তর না হলেও এটি আকর্ষণীয়। আমি কিছু উত্তর শিখেছি বলে আমি এই উত্তরটিকে অগ্রাহ্য করেছি।
সাগ্ররেট

আপনার খেয়াল করা উচিত যে Fields()খালি স্ট্রিংগুলি ফিরে আসবে না। ফেরত ক্ষেত্রের সংখ্যা পৃথক হবে। যদি আপনি সামঞ্জস্যপূর্ণ কিছু বিশ্লেষণ করার চেষ্টা করছেন তবে এটি আপনার পক্ষে কার্যকর হবে না। আপনার যদি পুনরায় ব্যবহার করতে পারে তবে FieldsFunc()এটিও কাজ করবে না।
টম

3

আমি নিম্নলিখিতটি নিয়ে এসেছি, তবে এটি কিছুটা ভারবস বলে মনে হচ্ছে:

import "regexp"
r := regexp.MustCompile("[^\\s]+")
r.FindAllString("  word1   word2 word3   word4  ", -1)

যা মূল্যায়ন করবে:

[]string{"word1", "word2", "word3", "word4"}

আরও কমপ্যাক্ট বা আরও মুশকিল প্রকাশ আছে?

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.