天天看點

字元串

字元串是直接從 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]);