Как проверить, есть ли специальный символ в строке или если символ является специальным символом в GoLang

после чтения строки из ввода мне нужно проверить, есть ли в ней специальный символ

4 ответов


Вы можете использовать строки.ContainsAny, чтобы увидеть, существует ли руна:

package main

import (
  "fmt"
  "strings"
)

func main() {
  fmt.Println(strings.ContainsAny("Hello World", ",|"))
  fmt.Println(strings.ContainsAny("Hello, World", ",|"))
  fmt.Println(strings.ContainsAny("Hello|World", ",|"))
}

или если вы хотите проверить, есть ли только символы ASCII, вы можете использовать строки.IndexFunc:

package main

import (
    "fmt"
    "strings"
)

func main() {
    f := func(r rune) bool {
        return r < 'A' || r > 'z'
    }
    if strings.IndexFunc("HelloWorld", f) != -1 {
        fmt.Println("Found special char")
    }
    if strings.IndexFunc("Hello World", f) != -1 {
        fmt.Println("Found special char")
    }
}

в зависимости от вашего определения специальный символ, самое простое решение, вероятно, сделать for range цикл на вашей строке (которая дает руны вместо байтов), и для каждой руны проверьте, есть ли она в вашем списке разрешенных/запрещенных рун.

посмотреть строки, байты, руны и символы в Go подробнее об отношениях между строками, байтами и рунами.

детская площадка пример


Я закончил делать что-то вроде этого

alphabet := "abcdefghijklmnopqrstuvwxyz"
alphabetSplit := strings.Split(alphabet, "")
inputLetters := strings.Split(input, "")

for index, value := range inputLetters {
        special:=1
        for _, char :=range alphabetSplit{
            if char == value {
                special = 0
                break
            }
        }

это может быть что-то не так, потому что, поскольку я использовал его для чего-то конкретного, мне пришлось редактировать, чтобы опубликовать его здесь


вы хотите использовать пакет Unicode, который имеет хорошую функцию для проверки символов.

https://golang.org/pkg/unicode/#IsSymbol

package main

import (
    "fmt"
    "unicode"
)

func hasSymbol(str string) bool {
    for _, letter := range str {
        if unicode.IsSymbol(letter) {
            return true
        }
    }
    return false
}

func main() {   
    var strs = []string {
        "A quick brown fox",
        "A+quick_brown<fox",
    }

    for _, str := range strs {
        if hasSymbol(str) { 
            fmt.Printf("String '%v' contains symbols.\n", str)
        } else {
            fmt.Printf("String '%v' did not contain symbols.\n", str)   
        }
    }
}

Это обеспечит следующий вывод:

String 'A quick brown fox' did not contain symbols.
String 'A+quick_brown<fox' contains symbols.