Как проверить, есть ли специальный символ в строке или если символ является специальным символом в 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.