2016-07-06 125 views
1

我知道ToUpper和ToLower来自字符串包,但显然他们在这里没有帮助。是否有内置函数,还是必须自己写一个函数?如何反转字符串中每个字母的大小写?

+2

敢肯定你得写一个自己。这很简单,基本的想法是;得到ASCII值,如果它的大写字母减去26,如果小写字母加上相同的值。 – evanmcdonnal

+1

除非你有非ASCII字符。你应该能够处理这个问题:“Привіт,Світ!”不会那样工作 – JimB

回答

9

你需要自己写一个,但积木已经在标准库:

func swapCase(s string) string { 
    return strings.Map(func(r rune) rune { 
     switch { 
     case unicode.IsLower(r): 
      return unicode.ToUpper(r) 
     case unicode.IsUpper(r): 
      return unicode.ToLower(r) 
     } 
     return r 
    }, s) 
} 
+0

该死的@JimB,你正赶上我,停下来! – OneOfOne

+0

漂亮,优雅的解决方案。 – icza

+0

看起来真的很优雅!谢谢。这需要我一些时间来包裹我的头。 – Arthmost

相关问题