字元串是直接從 object 繼承的密封類類型。不可以被繼承,表示 unicode 字元串。
前面我們還了解了可以使用@表示禁止轉義。
字元串常用屬性
length
傳回字元串長度
chars
指定字元位置的字元
字元串常用方法
indexof
indexofany
lastindexof
lastindexofany
字元的索引
insert
指定索引位置插入一個指定的 string 執行個體
remove
從此執行個體中的指定位置開始删除指定數目的字元
padleft
padright
使用空格或指定的字元填充
replace
使用新的字元替換原有的字元
split
按指定的分隔符将字元串轉為數組
substring
查詢子串
tochararray
将字元串轉為字元數組
tolower
toupper
大小寫轉換
isnullorempty
是空還是非空字元串
trim
trimend
trimstart
去除空格或指定字元
string的本質是char的數組描述形式,可以通過以下的代碼來證明
1
string s = "hello c#";
2
3
foreach (char c in s)//string中的每個元素都是char
4
{
5
system.console.writeline(c);
6
}
7
8
for (int i = 0; i <= s.length - 1;i++ )//string就是一個char數組
9
10
system.console.writeline(s[i]);
11
很多同學對indexof這個方法總感覺莫名其妙,不知道indexof有什麼用。indexof有很多地方可以使用。
現看一下indexof的表現
//僅僅是查找的方向不一樣,字元的位置總是從0開始計算
system.console.writeline(s.indexof('l'));//2,第3個字元,從前面數第一個l
system.console.writeline(s.lastindexof('l'));//3,第4個字元,從後面數第一個l
那indexof和lastindexof有什麼具體的作用呢?
string s = "-12.23";
if(s.indexof('.')!=s.lastindexof('.'))
system.console.writeline("小數點不止一個,錯誤");
if(s.lastindexof('-')>0)
system.console.writeline("符号不止一個或符号不在第一位,錯誤");
12
13
14
15
if (s.lastindexof('.') - s.lastindexof('-')==1)
16
17
system.console.writeline("小數點在符号直接後面,錯誤");
18
其實indexof和lastindexof的處理大緻如下
string s = "hello";
//indexof
for (int i = 0; i <= s.length - 1;i++ )
if(s[i]=='l')
system.console.writeline("indexof={0}",i);
break;
//lastindexof
for (int i = s.length-1; i >=0; i--)
if (s[i] == 'l')
system.console.writeline("lastindexof={0}", i);
19
20
21
我們來個練習鞏固一下
聲明一個字元串,且指派” 我們使用microsoft visual studio .net 2005 c#開發新一代的應用程式”。
輸出 英文字元的個數
輸出 标點符号的個數
輸出 剩餘其他字元的個數
char[] c = "我們使用microsoft visual studio .net 2003 c#開發新一代的應用程式".tochararray();
string letter = "abcdefghijklmnopqrstuvwxyz";
letter += letter.tolower();
string punctuation = @"~!@#$%^&*()_+|`-=/[]{};':<>?,./";
int li = 0;//英文字元個數
int pi = 0;//标點符号個數
int ci = 0;//其他字元個數
for (int i = 0; i <= c.length - 1; i++)
if (letter.indexof(c[i]) >= 0)
li++;
else
if (punctuation.indexof(c[i]) >= 0)
pi++;
22
ci++;
23
24
25
26
system.console.writeline("總字元個數:{0}", c.length);
27
system.console.writeline("英文字元個數:{0}标點符号個數:{1}其他字元個數:{2}合計:{3}",
28
li, pi, ci, li + pi + ci);
當然,我們可以用char的靜态方法來優化上面的代碼
if (char.isupper(c[i]) || char.islower(c[i]))
if (char.ispunctuation(c[i]))
ci++; ;
system.console.writeline("{0}--{1},{2},{3}:{4}", li + pi + ci, li, pi, ci, c.length);
spilt是非常有用的方法
string dir = @"c:/windows/microsoft.net/framework/v2.0.50727/applaunch.exe";
//不使用split的繁瑣代碼
int star = 0;
int end = dir.indexof('//', star);
do
system.console.writeline(dir.substring(star, end - star));
star = end + 1;
end = dir.indexof('//', star);
} while (end > -1);
system.console.writeline(dir.substring(star));
//不使用split的優雅代碼
string[] dirs = dir.split('//');
foreach (string d in dirs)
system.console.writeline(d);
//直接定位檔案
system.console.writeline(dir.split('//')[dir.split('//').length - 1]);