2

我尝试了一些我在 Javascript 中所做的事情。但它说 http://play.golang.org/p/qlWLI03Dnl

    package main

    import "fmt"
    import "regexp"
    import "strings"

    func swapit(str string) string {
        var validID = regexp.MustCompile(`[a-z]|[A-Z]`)
        return validID.ReplaceAllString(str, func(${0}, ${1}, ${2}) string {
                return (${1}) ? strings.ToUpper(${0}) : strings.ToLower(${0})
            })

    }

    func main() {
        fmt.Println(swapit("hello wOrld."))
        // HELLO WoRLD.

    }

我也试过这个删除?: 语法但仍然不起作用。 http://play.golang.org/p/mD6_78zzo1

真的去不支持这个吗?我是否只是放弃并强制每个角色更改案例?

非常感谢

4

1 回答 1

8

正如@James Henstridge 已经指出的那样,您的代码存在多个问题。这个答案不会关注错误,而是解决问题的不同方式。

如果您的目标是学习在 Go 中使用正则表达式,那么我的这个答案是没有用的。
如果您的目标是学习如何制作一个交换案例的函数,那么我建议使用不使用正则表达式的解决方案,unicode而是使用该包:

package main

import (
    "bytes"
    "fmt"
    "unicode"
)

func SwapCase(str string) string {
    b := new(bytes.Buffer)

    for _, r := range str {
        if unicode.IsUpper(r) {
            b.WriteRune(unicode.ToLower(r))
        } else {
            b.WriteRune(unicode.ToUpper(r))
        }
    }

    return b.String()
}

func main() {
    fmt.Println(SwapCase("Hej värLDen."))
}

输出:

hEJ 瓦尔登。

操场

此解决方案还将处理所有非 AZ 字符,例如 ö-Ö 和 å-Å。

于 2013-10-02T06:19:52.717 回答