001 |
package main |
002 |
003 |
import ( |
004 |
"fmt" |
005 |
"strings" |
006 |
//"unicode/utf8" |
007 |
) |
008 |
009 |
func main() { |
010 |
fmt.Println( "查找子串是否在指定的字符串中" ) |
011 |
fmt.Println( " Contains 函數的用法" ) |
012 |
fmt.Println(strings.Contains( "seafood" ,
"foo" )) //true |
013 |
fmt.Println(strings.Contains( "seafood" ,
"bar" )) //false |
014 |
fmt.Println(strings.Contains( "seafood" ,
"" )) //true |
015 |
fmt.Println(strings.Contains( "" ,
"" )) //true 這裏要特別注意 |
016 |
fmt.Println(strings.Contains( "我是中國人" ,
"我" )) //true |
017 |
018 |
fmt.Println( "" ) |
019 |
fmt.Println( " ContainsAny 函數的用法" ) |
020 |
fmt.Println(strings.ContainsAny( "team" ,
"i" )) // false |
021 |
fmt.Println(strings.ContainsAny( "failure" ,
"u & i" )) // true |
022 |
fmt.Println(strings.ContainsAny( "foo" ,
"" )) // false |
023 |
fmt.Println(strings.ContainsAny( "" ,
"" )) // false |
024 |
025 |
fmt.Println( "" ) |
026 |
fmt.Println( " ContainsRune 函數的用法" ) |
027 |
fmt.Println(strings.ContainsRune( "我是中國" ,
'我' )) // true 注意第二個參數,用的是字符 |
028 |
029 |
fmt.Println( "" ) |
030 |
fmt.Println( " Count 函數的用法" ) |
031 |
fmt.Println(strings.Count( "cheese" ,
"e" )) // 3
|
032 |
fmt.Println(strings.Count( "five" ,
"" )) // before & after each rune result: 5 , 源碼中有實現 |
033 |
034 |
fmt.Println( "" ) |
035 |
fmt.Println( " EqualFold 函數的用法" ) |
036 |
fmt.Println(strings.EqualFold( "Go" ,
"go" )) //大小寫忽略
|
037 |
038 |
fmt.Println( "" ) |
039 |
fmt.Println( " Fields 函數的用法" ) |
040 |
fmt.Println( "Fields are: %q" , strings.Fields( " foo bar baz " ))
//["foo" "bar" "baz"] 返回一個列表 |
041 |
042 |
//相當於用函數做爲參數,支持匿名函數 |
043 |
for
_, record := range []string{ " aaa*1892*122" ,
"aaa\taa\t" , "124|939|22" } { |
044 |
fmt.Println(strings.FieldsFunc(record, func(ch rune)
bool { |
045 |
switch
{ |
046 |
case
ch > '5' : |
047 |
return
true |
048 |
} |
049 |
return
false |
050 |
})) |
051 |
} |
052 |
053 |
fmt.Println( "" ) |
054 |
fmt.Println( " HasPrefix 函數的用法" ) |
055 |
fmt.Println(strings.HasPrefix( "NLT_abc" ,
"NLT" )) //前綴是以NLT開頭的 |
056 |
057 |
fmt.Println( "" ) |
058 |
fmt.Println( " HasSuffix 函數的用法" ) |
059 |
fmt.Println(strings.HasSuffix( "NLT_abc" ,
"abc" )) //後綴是以NLT開頭的 |
060 |
061 |
fmt.Println( "" ) |
062 |
fmt.Println( " Index 函數的用法" ) |
063 |
fmt.Println(strings.Index( "NLT_abc" ,
"abc" )) // 返回第一個匹配字符的位置,這裏是4 |
064 |
fmt.Println(strings.Index( "NLT_abc" ,
"aaa" )) // 在存在返回 -1 |
065 |
fmt.Println(strings.Index( "我是中國人" ,
"中" )) // 在存在返回 6 |
066 |
067 |
fmt.Println( "" ) |
068 |
fmt.Println( " IndexAny 函數的用法" ) |
069 |
fmt.Println(strings.IndexAny( "我是中國人" ,
"中" )) // 在存在返回 6 |
070 |
fmt.Println(strings.IndexAny( "我是中國人" ,
"和" )) // 在存在返回 -1 |
071 |
072 |
fmt.Println( "" ) |
073 |
fmt.Println( " Index 函數的用法" ) |
074 |
fmt.Println(strings.IndexRune( "NLT_abc" ,
'b' )) // 返回第一個匹配字符的位置,這裏是4 |
075 |
fmt.Println(strings.IndexRune( "NLT_abc" ,
's' )) // 在存在返回 -1 |
076 |
fmt.Println(strings.IndexRune( "我是中國人" ,
'中' )) // 在存在返回 6 |
077 |
078 |
fmt.Println( "" ) |
079 |
fmt.Println( " Join 函數的用法" ) |
080 |
s := []string{ "foo" ,
"bar" , "baz" } |
081 |
fmt.Println(strings.Join(s,
", " )) // 返回字符串:foo, bar, baz
|
082 |
083 |
fmt.Println( "" ) |
084 |
fmt.Println( " LastIndex 函數的用法" ) |
085 |
fmt.Println(strings.LastIndex( "go gopher" ,
"go" )) // 3 |
086 |
087 |
fmt.Println( "" ) |
088 |
fmt.Println( " LastIndexAny 函數的用法" ) |
089 |
fmt.Println(strings.LastIndexAny( "go gopher" ,
"go" )) // 4 |
090 |
fmt.Println(strings.LastIndexAny( "我是中國人" ,
"中" )) // 6 |
091 |
092 |
fmt.Println( "" ) |
093 |
fmt.Println( " Map 函數的用法" ) |
094 |
rot13 := func(r rune) rune { |
095 |
switch
{ |
096 |
case
r >= 'A'
&& r <= 'Z' : |
097 |
return
'A' + (r- 'A' +13)%26 |
098 |
case
r >= 'a'
&& r <= 'z' : |
099 |
return
'a' + (r- 'a' +13)%26 |
100 |
} |
101 |
return
r |
102 |
} |
103 |
fmt.Println(strings.Map(rot13,
"'Twas brillig and the slithy gopher..." )) |
104 |
105 |
fmt.Println( "" ) |
106 |
fmt.Println( " Repeat 函數的用法" ) |
107 |
fmt.Println( "ba"
+ strings.Repeat( "na" , 2))
//banana |
108 |
109 |
fmt.Println( "" ) |
110 |
fmt.Println( " Replace 函數的用法" ) |
111 |
fmt.Println(strings.Replace( "oink oink oink" ,
"k" , "ky" , 2)) |
112 |
fmt.Println(strings.Replace( "oink oink oink" ,
"oink" , "moo" , -1)) |
113 |
114 |
fmt.Println( "" ) |
115 |
fmt.Println( " Split 函數的用法" ) |
116 |
fmt.Printf( "%q\n" , strings.Split( "a,b,c" ,
"," )) |
117 |
fmt.Printf( "%q\n" , strings.Split( "a man a plan a canal panama" ,
"a " )) |
118 |
fmt.Printf( "%q\n" , strings.Split( " xyz " ,
"" )) |
119 |
fmt.Printf( "%q\n" , strings.Split( "" ,
"Bernardo O'Higgins" )) |
120 |
121 |
fmt.Println( "" ) |
122 |
fmt.Println( " SplitAfter 函數的用法" ) |
123 |
fmt.Printf( "%q\n" , strings.SplitAfter( "/home/m_ta/src" ,
"/" )) //["/" "home/" "m_ta/" "src"] |
124 |
125 |
fmt.Println( "" ) |
126 |
fmt.Println( " SplitAfterN 函數的用法" ) |
127 |
fmt.Printf( "%q\n" , strings.SplitAfterN( "/home/m_ta/src" ,
"/" , 2)) //["/" "home/m_ta/src"] |
128 |
fmt.Printf( "%q\n" , strings.SplitAfterN( "#home#m_ta#src" ,
"#" , -1)) //["/" "home/" "m_ta/" "src"] |
129 |
130 |
fmt.Println( "" ) |
131 |
fmt.Println( " SplitN 函數的用法" ) |
132 |
fmt.Printf( "%q\n" , strings.SplitN( "/home/m_ta/src" ,
"/" , 1)) |
133 |
134 |
fmt.Printf( "%q\n" , strings.SplitN( "/home/m_ta/src" ,
"/" , 2)) //["/" "home/" "m_ta/" "src"] |
135 |
fmt.Printf( "%q\n" , strings.SplitN( "/home/m_ta/src" ,
"/" , -1)) //["" "home" "m_ta" "src"] |
136 |
fmt.Printf( "%q\n" , strings.SplitN( "home,m_ta,src" ,
"," , 2)) //["/" "home/" "m_ta/" "src"] |
137 |
138 |
fmt.Printf( "%q\n" , strings.SplitN( "#home#m_ta#src" ,
"#" , -1)) //["/" "home/" "m_ta/" "src"] |
139 |
140 |
fmt.Println( "" ) |
141 |
fmt.Println( " Title 函數的用法" )
//這個函數,還真不知道有什麼用 |
142 |
fmt.Println(strings.Title( "her royal highness" )) |
143 |
144 |
fmt.Println( "" ) |
145 |
fmt.Println( " ToLower 函數的用法" ) |
146 |
fmt.Println(strings.ToLower( "Gopher" ))
//gopher |
147 |
148 |
fmt.Println( "" ) |
149 |
fmt.Println( " ToLowerSpecial 函數的用法" ) |
150 |
151 |
fmt.Println( "" ) |
152 |
fmt.Println( " ToTitle 函數的用法" ) |
153 |
fmt.Println(strings.ToTitle( "loud noises" )) |
154 |
fmt.Println(strings.ToTitle( "loud 中國" )) |
155 |
156 |
fmt.Println( "" ) |
157 |
fmt.Println( " Replace 函數的用法" ) |
158 |
fmt.Println(strings.Replace( "ABAACEDF" ,
"A" , "a" , 2))
// aBaACEDF |
159 |
//第四個參數小於0,表示所有的都替換, 可以看下golang的文檔 |
160 |
fmt.Println(strings.Replace( "ABAACEDF" ,
"A" , "a" , -1))
// aBaaCEDF |
161 |
162 |
fmt.Println( "" ) |
163 |
fmt.Println( " ToUpper 函數的用法" ) |
164 |
fmt.Println(strings.ToUpper( "Gopher" ))
//GOPHER |
165 |
166 |
fmt.Println( "" ) |
167 |
fmt.Println( " Trim 函數的用法" ) |
168 |
fmt.Printf( "[%q]" , strings.Trim( " !!! Achtung !!! " ,
"! " )) // ["Achtung"] |
169 |
170 |
fmt.Println( "" ) |
171 |
fmt.Println( " TrimLeft 函數的用法" ) |
172 |
fmt.Printf( "[%q]" , strings.TrimLeft( " !!! Achtung !!! " ,
"! " )) // ["Achtung !!! "] |
173 |
174 |
fmt.Println( "" ) |
175 |
fmt.Println( " TrimSpace 函數的用法" ) |
176 |
fmt.Println(strings.TrimSpace( " \t\n a lone gopher \n\t\r\n" ))
// a lone gopher |
177 |
178 |
} |