I've just joined the group and had to get activated, that's why my answer 
took so long. Should have waited until then.

Thank you for the notice! I fixed it in the playground: 
https://play.golang.org/p/kuk6FxesDq.
Although I wrote a benchmark (https://play.golang.org/p/YpnI257SHD), I 
didn't write tests. Sorry for that!

I still would use Seths version, since it correctly splits uppercase-words 
like CAMELCase to ["C" "A" "M" "E" "L" "Case"].

Am Dienstag, 5. September 2017 03:43:22 UTC+2 schrieb Tong Sun:
>
> Oh thanks a lot Florian! 
>
> I wished I had received it earlier (my email header said, Created at: Sun, 
> Sep 3, 2017 at 6:03 PM (Delivered after 89531 seconds)), because my own 
> version is embarrassingly complicated:
>
>
> https://github.com/go-dedup/text/blob/3d0d998bef3db3937496933778c55e4f01cab5e4/text.go#L37-L60
>
> I'll go with the simple camelRegexp, because to be fair, the camelAppend 
> is not handing the cases that camelRegexp is handling, e.g., "FooBarBaz GNU 
> PYTHON Standard", and I'll make it not inserting space if there is already 
> one there...
>
> PS. did you have to write extra code (not published here) to use `go test 
> -bench=.`?
>
> thx
>
>
>
> On Sun, Sep 3, 2017 at 6:03 PM, Florian Florensen <fl...@posteo.de 
> <javascript:>> wrote:
>
>> Hi, two approaches would be:
>>
>> func camelAppend(str string) string {
>>   w := []rune(str)
>>   for i := len(w) - 1; i > 1; i-- {
>>     if unicode.IsUpper(w[i]) {
>>       w = append(w[:i], append([]rune{' '}, w[i:]...)...)
>>     }
>>   }
>>   return string(w)
>> }
>>
>> func camelRegexp(str string) string {
>>   re := regexp.MustCompile(`([A-Z]+)`)
>>   str = re.ReplaceAllString(str, ` $1`)
>>   str = strings.Trim(str, " ")
>>   return str
>> }
>>
>> $ go test -bench=.
>> goos: darwin
>> goarch: amd64
>> BenchmarkCamelAppend-4   3000000       444 ns/op
>> BenchmarkCamelRegexp-4    200000     11224 ns/op
>> PASS
>>
>>
>> Am Sonntag, 3. September 2017 23:23:59 UTC+2 schrieb Tong Sun:
>>>
>>> Hi, 
>>>
>>> I need to split "CamelCaseWords" into individual words like "Camel Case 
>>> Words". 
>>> The following is the Perl code that I get for doing just that:
>>>
>>>     @words = $words[0] =~ /[A-Z][^A-Z]*/g
>>>         if @words == 1 && $words[0] =~ /^[A-Z]/;
>>>
>>> However, I've been staring at it long enough to confirm myself that I 
>>> really don't quite understand how it was done. 
>>>
>>> Anyway, I'm wondering what's the neat way to do it in Go. 
>>>
>>> PS. if you must know, I know that the algorithm I can borrow from is 
>>> github.com/danverbraganza/varcaser, but when I was trying to use it, I 
>>> noticed a side effect that makes it works for "myConstantVariable" but not 
>>> for "GNU PYTHON Standard":
>>> https://github.com/danverbraganza/varcaser/issues/1
>>>
>>> Thanks
>>>
>>> -- 
>> You received this message because you are subscribed to a topic in the 
>> Google Groups "golang-nuts" group.
>> To unsubscribe from this topic, visit 
>> https://groups.google.com/d/topic/golang-nuts/MmerkVS9ke0/unsubscribe.
>> To unsubscribe from this group and all its topics, send an email to 
>> golang-nuts...@googlegroups.com <javascript:>.
>> For more options, visit https://groups.google.com/d/optout.
>>
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to