字串與正規表示式
1. 字串基本屬性與函式
- 字串(String)類別
System,當你建立一個string的變數既為引用他的類別。但是在字串的宣告我們
通常不以new關鍵字去建立字串物件,主要原因是所有資料型態都可以轉成字串
文字,所以通常C#允許用數值型別的方式去宣告字串。
- 字串建構子
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.動態的字串與靜態字串比較
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 | 簡短日期模式 |
D | 完整日期模式 |
t | 簡短時間模式 |
T | 完整時間模式 |
f | 完整可排序日期/時間模式 |
F | 完整可排序日期/時間模式 |
g | 一般可排序日期/時間模式 |
G | 一般可排序日期/時間模式 |
M/m | 日月模式 |
R/r | RFC1123模式 |
s | ISO8601模式 |
u | 通用日期/時間模式 |
U | 通用日期/時間模式 |
Y/y | 年月模式 |
d/dd | 1~31數字來顯示日期,dd則是顯示完整名稱 |
ddd | 顯示日期的縮寫 |
dddd | 顯示完整名稱 |
g | 顯示指定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) 直接轉為百分比
留言
張貼留言