2013年8月21日

C#教材(13) 字串與正規表示式

字串與正規表示式


 1. 字串基本屬性與函式
  • 字串(String)類別
    字串簡單來說就是由多個字元所組成的字元集合,字串類別為核心的命名空間
    System,當你建立一個string的變數既為引用他的類別。但是在字串的宣告我們
    通常不以new關鍵字去建立字串物件,主要原因是所有資料型態都可以轉成字串
    文字,所以通常C#允許用數值型別的方式去宣告字串。
  • 字串建構子
     I. public String(char[] charValue)
    II. public String(char[], int startIndex, int length);
   III. public String(char value, int conent)
 

  • 字串運算

   字串可以利用+運算子將字串做累加的動作,直接附加到原來的文字上面。

                   string name = " jack ," ;
                   string say = " hello" ;
                   string sentence = name + say;
                   Console .WriteLine(sentence);
                                   
                                    結果:  jack ,hello

  • 字串屬性的成員
      (1) 取得字串長度
           public int Length { get ;}     
     
      (2)刪除部分字串 
          Remove(int1,int2) :從int1(起始位置)開始刪除長度為int2的字串

     (3) 插入子字串: 
           Insert(int,string) :在int的位置插入string

    (4) 取出部分字串
           Substring(int) : 從參數開始取出剩下的字串
           Substring(int1,int2) : 取出int1開始長度為int2的字串
    (5) 索引
           IndexOf(string) : 傳回第一次搜尋到字串(string)的位置
           IndexOf(string,int) : 傳回第一次搜尋到字串(string)的位置,開始搜尋位置為int
           LastIndexOf(string) : 跟IndexOf功能類似,但從後面開始搜尋
           LastIndexOf(string,int) : 跟IndexOf功能類似,但從後面開始搜尋
           Replace(char,char) : 取代字元
    (6) 其他
          ToLower() 將英文轉成小寫
          ToUpper() 將英文轉成大寫
          Trim() 刪除字串前後的空白字元
          TrimEnd() 刪除字串尾部的空白字元
          TrimStart() 刪除字串開頭的空白字元
     (7) 字串運算
           int Compare(str1, str2 ) :  str1 == str2 回傳 0 ,  str1 > str2 回傳 1 , str1 < str2 回傳 -1
           int Compare(str1, str2, boolean )    宣告為true忽略大小寫

     (8) 擷取子字串
           string[] Split(param char[] charArray)


2.動態的字串與靜態字串比較
(1) String 類別
  string 是一個很強大的類別,它可以執行很多有用的方法,但是當我們重新給定
  string的值,需要重新規劃空間給他,效率很低。

 (2)StringBuilder類別
     Import: System.Text
    StringBuilder 物件會保留自己的字串緩衝區,所有新增、刪除、或是修改都只會
    在同一塊記憶體工作,優點是減少記憶體配置的動作除非緩衝區大小不夠處理
    時,才會作記憶體重新配置,預設容量為16,超過容量時會加倍到32,上限為   
    2,147,483,647
 
    相關函式:
     
    建構子:

Name Description
StringBuilder() 初始化,預設容量為16
StringBuilder(Int32) 初始化,預設容量可指定
StringBuilder(String) 初始化,預設字串內容
StringBuilder(Int32 start , Int32  max) 初始化,預設容量和上限
StringBuilder(String context, Int32 capacity) 初始化,預設容量和上限
StringBuilder(String, Int32, Int32, Int32) 初始化,指定位址、預設容量和上限

屬性 :

Name Description
Capacity 設定或是取得字串容量
Chars 設定或是取得字串容量.
Length 設定或是取得字串長度.
MaxCapacity 設定或是取得最大容量大小

方法:


Name Description
append 設定或是取得字串容量
appendFormat 設定或是取得字串容量.
AppendLine 設定或是取得字串長度.
Clear 設定或是取得最大容量大小
CopyTo   複製
Equals(object value) 是否相等
Insert() 插入一個字串
Remove 移除
Replace(string ,string) 取代另外一個字串

Ex:


規則運算式

1.基本概念:

(1). 跳脫字元(Character Escapes)
    某些字元代表的特殊意義,例如: * 、$等等
(2).分類字元(Character Classes)
    比對某種類型的字元,例如:[0-9]會將比對輸入的字串是否為數字、[dog]會將比對輸入
    的字串是否為d、o和g的字母。
(3).數量符號: (Quantifiers)
    用以指定所套用的樣式於字串,比對字串或是字元出現的次數。Ex: 5{2}找到55的字串
(4). 規則運算(Regular Expression Options)
    搜尋以及比對樣式
(5). 置換(Substitutions)
     取代功能


2. 實作程式
Import : using System.Text.RegularExpressions;

實作下列程式:

            string testString = @"今天天氣很好,我們一起去爬山,山上有很多猴子
                                        ,那些猴子很好玩";
            Console.WriteLine(testString);
            string matchStr = @"猴子";
            Regex regex = new Regex(matchStr);
            MatchCollection collection = regex.Matches(testString);
            Console.WriteLine("比對樣式:") ;
            foreach (Match match in collection)
            {
                Console.WriteLine("樣式: {0} , 位置:{1}",match,match.Index);
            }




          string testString = @"今天天氣很好,我們一起去爬山,山上有很多猴子,
                                     那些猴子很好玩";
            Console.WriteLine(testString);
            string matchStr = @"猴?";
            Regex regex = new Regex(matchStr);
            MatchCollection collection = regex.Matches(testString);
            Console.WriteLine("比對樣式:") ;
            foreach (Match match in collection)
            {
                Console.WriteLine("樣式: {0} , 位置:{1}",match,match.Index);
            }

    將matchStr 改為下列樣式:
      string matchStr = @"天{2}";
         

    將matchStr 改為下列樣式:[好天氣猴子]只要符合好、天、氣、猴、子的樣式。
      string matchStr = @"[好天氣猴子]";

字元


Name Description
? 設定或是取得字串容量
.    設定或是取得字串容量.
xy   設定或是取得字串長度.
+ 設定或是取得最大容量大小
  複製
^ 是否相等
$ 插入一個字串
\   移除
{n}  取代另外一個字串
{n,m} 比對前一個字元至少 n 次,至多 m 次,m、n 均為正整數
[xyz]    比對中括弧內的任一個字元
[^xyz] 比對不在中括弧內出現的任一個字元
\d  數字, 等於[0-9]
\D  非數字, 等於[^0-9]
\w  數字、字母、底線 [a-zA-Z0-9_]
\W 非數字、字母、底線 [^a-zA-Z0-9_]
\s  空白字元 [ \r\t\n\f]
\S 非空白字元 [^ \r\t\n\f]

  •  Regex方法

(1) public string[] Split(string strInput)
   

格式化

(1) public static string Format(string strformat, object obj)

Name Description
C或是 c 將數值轉換為貨幣數值格式。
D或是d 可以自動補零
E或是e 科學符號
F或是f 固定點
G或是g   一般
N或是n  編號 
P或是p 格式化以百分比的格式作輸出
X或是x  十六進制  
0 利用0將空白字串填滿
# 表示數字
.  小數點
 百分比
E0    科學符號
,   千位數分隔符號

Ex:
            double d2 = 10000;
            string result = "";
            result = string.Format("{0:###,###.000}",d2);
            Console.WriteLine(result);
            result = string.Format("{0:00}", 8);
            Console.WriteLine(result);
            result = string.Format("{0:P}", 0.5);
            Console.WriteLine(result);
            result = string.Format("{0:C}", 1000.00);
            Console.WriteLine(result);



(2)日期格式化:


Name Description
簡短日期模式
D  完整日期模式
t 簡短時間模式
T   完整時間模式
f  完整可排序日期/時間模式
F     完整可排序日期/時間模式
g   一般可排序日期/時間模式
G 一般可排序日期/時間模式
M/m  日月模式
R/r   RFC1123模式
s  ISO8601模式
通用日期/時間模式
通用日期/時間模式
Y/y    年月模式
d/dd   1~31數字來顯示日期,dd則是顯示完整名稱
ddd   顯示日期的縮寫
dddd  顯示完整名稱
顯示指定DateTime物件的紀元年代
h/hh  1-12小時,hh為在1-9之間前面補零                    
H/HH 0-23小時,HH為在1-9之間前面補零   
m/mm   顯示0-59分鐘,mm 為在1-9之間前面補零         
M/MM 顯示月份1-12月,MM為在1-9之間前面補零  
MMM 顯示月份縮寫
MMMM  顯示月份完整
s/ss   0-59,ss為在1-9之間前面補零
t/tt   AM或是PM
y/yy   顯示年份,yy為在1-9之間前面補零 
yyyy  顯示完整年份
z/zz  顯示目前得時區
zzz   顯示目前完整時區
日期分隔符號
''  顯示逸出字元
'   
%c 標準格式字元 
\c 顯示下一個字元為常值

EX:
      DateTime dt = DateTime.Now;
      Console.WriteLine("格式 yyyy/MM/dd HH:mm:ss: {0:yyyy/MM/dd HH:mm:ss}",
                                   dt); //(1) 完整表示日期
      Console.WriteLine("格式: yyyy/M/d H:m:s {0:yyyy/M/d H:m:s}", dt); //(2) 簡單表示日期
      Console.WriteLine("格式: {0:000,### yyyy } ",  dt); //(3) 日期格式與其他格式混和
      Console.WriteLine("格式: {0:yyyy年MM月dd日 } ", dt); //(4) 顯示中文年月份

(1) 通常疊字dd、MM等等會將所需要的日期時間如果是個位數自動補零
(2) 通常疊字dd、MM等等會將所需要的日期時間自動補零
(3) DateTime元件只會認識自己專屬的格式不會受到混淆
(4) 顯示中文年月份




  • ToString方法
toString除了可以將基本資料轉為字串外,他也可以自訂輸出的資料格式

Ex:

   int number = 1234;
Console.WriteLine(number.ToString("000,###")); //(1) 轉為數字格式
Console.WriteLine(123.55.ToString("000,###.0000")); //(2)直接轉為
Console.WriteLine(0.5.ToString("p"));  //(3) 直接轉為百分比
























沒有留言:

張貼留言