跳到主要內容

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) 直接轉為百分比
























留言

這個網誌中的熱門文章

GSON基礎教學

GSON 前言 JSON是很常見的資料交換格式,在JAVA領域常用處理JSON的函式庫:GSON、FastXML和JSON-B,本章節會以GSON為主,學習目標如下 JSON格式說明 GSON 套件函式 GSON: 物件轉換JSON字串 GSON: JSON字串轉換物件 JSON 格式說明 JSON全名為JavaScript Object Notation,它是一種輕量級的資料交換格式,會大為流行的理由,主要是他比傳統用xml更輕巧且容易處理, JSON表達方式物件會用大括弧{},陣列則是用中括號[]。 用JSON字串來表達Employee的物件內容,由JSON字串可以知道物件name、age、sex和salary屬性。 JSON表示員工資料方式: {“name”:”Jack Bryant”, “age”:18, “sex”:”M”,”salary”:3500.00} JSON陣列表示方式: 跟我們使用JAVA的陣列方式類似,內容值可以是數字’、文字、布林、陣列、物件、null等等。 範例: 字串: [“紅”、”橙”、”黃”、”綠”、”青”、”藍”、”紫”} 布林: [true, true, false, false, true, true] GSON 套件函式 Gson為google所發布的函式庫,主要將物件與json字串之間的轉換時方便使用。當我們將JAVA物件轉換成JSON字串稱為 序列化 ,JSON字串轉換至JAVA物件稱為 反序列化 。 GSON: 物件轉換JSON字串 有了JSON基本概念後,我們進入本章重點,首先我們需要建立員工類別(Employee),定義如下 物件 屬性 員工類別 Employee name 名字 age 年紀 sex 性別 salary 薪水 /** * name:員工類別 */ public class Employee implements Serializable { //constructor public Employee(String name, double salary){ this.name = name; this.sala...

Python AI-問題集

Python AI-問題集 問題集 Jupyter Notebook執行ipywidgets會出現kernel死掉的錯誤發生(The kernel appears to have died) 解決方法 (1) 根據log檔來判斷問題: 例如:log訊息出現OMP: Error #15: Initializing libiomp5.dylib, but found libiomp5.dylib already initialized. (2) 根據問題關鍵字找出問題所在: 利用google查詢所遭遇到的問題,例如我把上面的問題上google查詢可以找到這篇的解法 https://blog.csdn.net/bingjianIT/article/details/86182096 (3)實作解法: 我實作下面解法後,就可以順利執行手寫辨識的程式. //在Python宣告時加入 import os os.environ["KMP_DUPLICATE_LIB_OK"]="TRUE" 參考 https://blog.csdn.net/bingjianIT/article/details/86182096

PHP與Python搭配

今天介紹如何利用php網頁呼叫目錄下的python程式工作或是資料交換,本人整理的方法有兩種 使用system()、exec()、shell_exec()呼叫程式 (1) string system ( string return_var ] ) 參考網址 官網解釋system()用來執行外部命令,返回為印出的結果,passthru()跟system()類似但是它不會返回結果。 範例1. 利用system執行ls指定並顯示在網頁上,無法使用變數保留ls的結果 檔案名稱: psystem.php $jsondata= system("ls -al", $result); 結果: (2) exec() : string exec ( string output [, int &$return_var ]] ) 參考網址 範例2. 利用exec執行python程式並可以回傳json格式給前端網頁做處理並顯示。我們ptopy.php就是可以看到callpy()為執行py的函式,它執行完pyEx01.py會將結果給$jsondata變數,做後面json解析。 檔案名稱: ptopy.php function callpy() { $jsondata= exec("/usr/bin/python pyEx01.py"); return $jsondata ; } $jsondata= callpy(); echo $jsondata ; echo " " ; $obj = json_decode($jsondata) ; echo "name:".$obj-> { 'name'} .',' ; echo "id:".$obj-> { 'id'} ; 檔案名稱: pyEx01.py import sys ...