字符串常用的系统函数
- 统计字符串的长度,按字节len(str),字母和数字占一个字节,汉字占3个字符
str := "hello北京"
fmt.Println("str len = ",len(str))
- 字符串遍历,同时处理有中文的问题 r := []rune(str)
r := []rune(str)
for i := 0;i < len(r);i++{
fmt.Printf("%c\n",r[i])
}
- 字符串转整数 n,err := strconv.Atoi(“12”)
n,err := strconv.Atoi("123")
//nil表示无值,任何变量在没有被赋值之前的值都为nil,对于真假判断,只有nil与false、0表示假,其余均为真。
if err != nil{
fmt.Println("转换错误",err)
}else {
fmt.Println("转换的结果是",n)
}
- 整数转字符串
str = strconv.Itoa(123456)
fmt.Println(str)
- 字符串转byte
var bytes = []byte("hello")
fmt.Printf("%v\n",bytes)
- byte转字符串
str = string([]byte{97,98,99})
fmt.Printf("%v\n",str)
- 10进制转2,8,16进制
str = strconv.FormatInt(123,2)
fmt.Printf("123对应的二进制是%v\n",str)
str = strconv.FormatInt(123,8)
fmt.Printf("123对应的八进制是%v\n",str)
str = strconv.FormatInt(123,16)
fmt.Printf("123对应的十六进制是%v\n",str)
- 查找子串是否在指定的字符串中
s := strings.Contains("seafood","oo")
fmt.Printf("%v\n",s)
- 统计一个字符串有几个指定的子串
num := strings.Count("seheese","se")
fmt.Printf("%v\n",num)
- 不区分大小写的字符串比较(==是区分大小写的)
b := strings.EqualFold("abc","ABC")
fmt.Printf("%v\n",b)
- 返回子串在字符串第一次出现的index值,如果没有就返回-1
index := strings.Index("1234abc","abc")
fmt.Printf("%v\n",index)
- 将指定的子串替换成另外的子串,n指希望替换几个,n = -1表示全部替换
t := strings.Replace("go go hello","go","北京",-1)
fmt.Printf("%v\n",t)
- 按照指定的某个字符串,为分割标识,将一个字符串拆分成字符串数组
strarr := strings.Split("hello,world,ok",",")
for i := 0;i < len(strarr);i++{
fmt.Printf("strarr[%v]=%v\n",i,strarr[i])
}
- 将字符串的字母进行大小写转换
str = strings.ToLower("Golang Hello") //小写
fmt.Printf("%v\n",str)
str = strings.ToUpper("Golang Hello") //大写
fmt.Printf("%v\n",str)
- 将字符串左右两边的空格去掉
str = strings.TrimSpace(" go hello ")
fmt.Println(str)
- 将字符串左右两边指定的字符去掉
str = strings.Trim("! go hello !","!")
fmt.Println(str)
- 判断字符串是否以指定字符串开头
b = strings.HasPrefix("http:123456","http")
fmt.Println(b)
- 判断字符串是否以指定字符串结束
b = strings.HasSuffix("http:123456","6")
fmt.Println(b)
时间和日期相关函数
- 获取当前时间
now := time.Now()
fmt.Println(now)
- 格式化日期时间
fmt.Printf("%d年%d月%d日 %d:%d:%d",now.Year(),now.Month(),now.Day(),now.Hour(),now.Minute(),now.Second())
- 时间常量
- 每隔2秒打印一个数字
for i := 0;i <=10;i++{
fmt.Println(i)
time.Sleep(time.Second*2)
}
- 获取当前Unix时间戳和UnixNano时间戳
fmt.Println(now.Unix(),now.UnixNano())
- 实例:编写一段代码来统计函数执行的时间
func test(){
str := ""
for i := 0;i <= 100000;i++{
str += "hello" +strconv.Itoa(i)
}
}
func main(){
start := time.Now().Unix()
test()
end := time.Now().Unix()
fmt.Println(end-start)
}
内置函数
func main(){
num1 := 100
fmt.Printf("类型%T,值%v,地址%v\n",num1,num1,&num1)
//new:用来分配内存,主要用来分配值类型
num2 := new(int)
*num2 = 100
fmt.Printf("类型%T,值%v,地址%v,指的值%v\n",num2,num2,&num2,*num2)
}
实例一:循环打印输入的月份天数
func RenYear(year int,month int) {
if (!((year % 4 == 0 && year % 100 != 0)||(year % 400 == 0 ))){
if month == 2{
fmt.Println("28")
}
}
if (year % 4 == 0 && year % 100 != 0)||(year % 400 == 0 ){
if month == 2 {
fmt.Println("29")
}
}
switch month {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
fmt.Println("31")
case 4:
case 6:
case 9:
case 11:
fmt.Println("30")
}
}
func main(){
fmt.Print("请输入年份:")
var year int
fmt.Scanln(&year)
fmt.Print("请输入月份:")
var month int
fmt.Scanln(&month)
RenYear(year,month)
}
实例二:随机猜数游戏
func guess(number int) {
rand.Seed(time.Now().UnixNano())
num := rand.Intn((100))
for i := 0; i <= 10; i++ {
if number == num {
fmt.Println("猜对啦!你真是个天才")
break
} else {
if number > num {
fmt.Printf("太大啦,你还有%d次机会\n", 10-i)
fmt.Print("请再猜一次:")
fmt.Scanln(&number)
}else {
fmt.Printf("太小啦,你还有%d次机会\n", 10-i)
fmt.Print("请再猜一次:")
fmt.Scanln(&number)
}
}
}
}
func main(){
fmt.Print("请在1-100中选择一个数:")
var number int
fmt.Scanln(&number)
guess(number)
}
实例三:输出100以内所有素数,每行显示5个,并求和
func main() {
k := 0
number := 3
for ; number <= 100; number++ {
count := 0
for i := 2; i < number; i++ {
if number%i == 0 {
count = 1
break
}
}
if count == 0 {
fmt.Printf("%d ",number)
k = k + 1
if k == 5 {
fmt.Print("\n")
}
if k == 10 {
fmt.Print("\n")
}
if k == 15 {
fmt.Print("\n")
}
if k == 20 {
fmt.Print("\n")
}
}
}
sum := 0
sum = sum + number
fmt.Printf("\n")
fmt.Printf("sum = %d",sum)
}
实例四:从1990年1月1日起开始执行“三天打鱼两天晒网”,如何判断在以后的某一天是“打鱼”还是“晒网”
func fish(inputyear int,inputmonth int,inputday int) {
year := 1990
month := 1
day := 1
sum := 0
//定义数组
a := [13]int{0,31,28,31,30,31,30,31,31,30,31,30,31}
for ;year < inputyear;year++{
if (year % 4 == 0 && year % 100 != 0)||(year % 400 == 0){
sum = sum + 366
}else{
sum = sum + 365
}
}
n := inputmonth - month
for i := 1;i <= n;i++{
sum = sum + a[i]
}
sum = sum + (inputday - day)
fmt.Println(sum)
if (sum % 5 == 1)|| (sum % 5 == 2)|| (sum % 5 == 3){
fmt.Printf("在%d年%d月%d日打鱼",inputyear,inputmonth,inputday)
}else {
fmt.Printf("在%d年%d月%d日晒网",inputyear,inputmonth,inputday)
}
}
func main() {
fmt.Print("请输入一个年份:")
var inputyear int
fmt.Scanln(&inputyear)
fmt.Print("请输入一个月份:")
var inputmonth int
fmt.Scanln(&inputmonth)
fmt.Print("请输入一个天数:")
var inputday int
fmt.Scanln(&inputday)
fish(inputyear,inputmonth,inputday)
}