2014年1月26日 星期日

物件導向

1.設定命名空間 Namespace

  • 將類別包裹在AjaxSoft.HR命名空間裡
範例:
    
namespace AjaxSoft.HR
{
    public class Person
    {
        public Person()
        {
            //
            // TODO: 在這裡新增建構函式邏輯
            //
        }
    }
}

2.設定命名空間 public,private

  • public-共用成員,無論是類別或類別外的程式碼都可存取選告為public的類別成員
  • private-只有在成員宣告的範圍內的程式碼才能存取
範例:

    
    public class Person
    {
        public string Name;
        private DateTime _birthday;
    }

筆者public宣告習慣將字頭大寫Name,private習慣加入底線_birthday

3.方法

    
[修飾元] 回傳值型別    方法名稱  (引數列)

{

              //程式敘述句

}
  • 無回傳值的方法
    • 有些方法並不會回傳資料,此時可以將回傳值宣告為void,不需要使用return保留字
範例:

    
    public class Person
    {
        public string Name;
        private DateTime _birthday;
        public void CheckName()
        {
            if(string.IsNullOrEmpty(Name))
            {
                Name = "尚未設定名字";
            }
        }
    }

  • 回傳值方法
    • C#應用程式使用return保留字,將運算的結果傳回到原呼叫的程式之中,return敘述所回傳的資料,必須和宣告方法時回傳值的資料型別相同
範例:

    
    public class Person
    {
        public string Name;
        private DateTime _birthday;
        public void CheckName()
        {
            if(string.IsNullOrEmpty(Name))
            {
                Name = "尚未設定名字";
            }
        }
        public string WhoAreU()
        {
            return "我是 :" + Name;
        }
    }

  • 若方法回傳值不是void,則方法至少有一個return敘述
  • 方法執行到return敘述就結束了,因此,return敘述後面的程式將不會執行到

  • 引數

    
[修飾元] 回傳值型別    方法名稱  (引數1,引數2,引數3......)

{

              //程式敘述句

}

範例:
    
    public class Person
    {
        public string Name;
        public void CheckName(string defaultName)
        {
            if(string.IsNullOrEmpty(Name))
            {
                Name = defaultName;
            }
        }
    }

4.屬性

    
[存取修飾詞] 資料型別    屬性名稱

{

              get{................}

              set{................}

}

範例:


    
        public DateTime BirthDay
        {
            get
            {
                //屬性被讀取或參考到時執行的程式
                return _birthday;
            }

            set
            {
                //屬性被寫入或設定到時執行的程式
                if(value < DateTime.Now)
                {
                    _birthday = value;
                }
            }
        }

唯讀及唯寫屬性

唯讀屬性只有設定get
唯寫屬性只有設定set
範例:

    
        public int Age
        {
            get
            {
                return DateTime.Now.Year - BirthDay.Year + 1;
            }
        }
因 Age 只有設定get,故Age 就是唯讀屬性

5.自動實作屬性

例如:Person.cs類別中的Name變數成員,當把Name這個變數成員要利用屬性,包裝起來讓外界存取,預設設計為

    
public string namespace;
    public string PersonName
{
    get
    {
        return Name;
    }
    set
    {
        Name = value;
    }
}
可改寫成

    
    public class Person
    {
        public string Name { get; set; }
    }

唯讀及唯寫

在get前面加入private代表"唯寫",在set前面加入private代表"唯讀"

    
    public class Person
    {
        public string Name { get; private set; }
    }

6.建構函式

如果希望在物件建立時,執行一段程式,則可在類別裡面加入建構函式(Constructor)。
建構函式就是用來定義物件實體初始化方式的程式區塊,宣告的語法為

[存取修飾詞] 物件類別名稱 (引數1,引數2.....) {

          //建立建構式

}
宣告建構函式的語法跟宣告方法的很像,但是有兩個不一樣的地方:
  • 建構函式沒有回傳值
  • 建構函式名稱和類別名稱相同
範例:
    
public class Employee
{
 public Employee()
 {
        Name = "ASP.NET";
        _birthday = DateTime.MinValue;
 }
}

  • 3~7行就是為建構式。
  • 5,6行則是當物件備建立時,設定資料成員Name及_birthday的初始值

2014年1月19日 星期日

流程控制

1.if條件判斷式 

  • 條件成立才執行
    • 使用者輸入在文字欄位輸入帳號時,按下button時就把輸入值印出來
範例:
    
    public partial class Training1 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

        }

        protected void Button1_Click(object sender, EventArgs e)
        {
            if(string.IsNullOrEmpty(TextBox1.Text) == false)
            {
                Response.Write("登入者:" + TextBox1.Text);
            }
        }
    }

    • 透過if(string.IsNullOrEmpty(TextBox1.Text) == false),檢查TextBox1.Text是否為空,
    • 如果不為空才執行Response.Write("登入者:" + TextBox1.Text);
  • 判斷是否為貨幣
    • 使用if及decimal.TryParse函式


    
    public partial class Training1 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

        }
        protected void Button2_Click(object sender, EventArgs e)
        {
            decimal d;//錢幣的宣告
            if(decimal.TryParse(TextBox1.Text,out d))
            {
                Response.Write(d.ToString("c"));//數值的格式化 decimal
            }
        }
    }
  • 二選一的情況
    • 沒輸入帳號就提示"請輸入帳號"


    
    public partial class Training1 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

        }
        protected void Button2_Click(object sender, EventArgs e)
        {
            if(string.IsNullOrEmpty(TextBox1.Text) == false)
            {
                Response.Write("帳號為" + TextBox1.Text);
            }
            else
            {
                Response.Write("請輸入帳號");
            }
        }
    }

    • 練習輸入可預約日期(大於今日皆可預約)

    
        protected void Button2_Click(object sender, EventArgs e)
        {
            DateTime dt;
            if (DateTime.TryParse(TextBox1.Text, out dt))
            {
                if (dt > DateTime.Now)
                {
                    Response.Write(dt.ToLongDateString().ToString()+"可以預約");
                }
                else
                {
                    Response.Write("請輸入未來日期");
                }
            }
            else
            {
                Response.Write("請輸入正確日期格式");
            }
        }

      • DateTime.TryParse(TextBox1.Text, out dt)檢查是否為正確日期格式
      • dt > DateTime.Now檢查是否大於今日
      • dt.ToLongDateString().ToString()日期格式化為2014年2月23日
  • 多選一的情況
    • TextBox1.Text的內容是否大於0
    
        protected void Button2_Click(object sender, EventArgs e)
        {
            if (Convert.ToInt32(TextBox1.Text)>0)//Convert.ToInt32轉換成int型別
            {
                Response.Write("正數");
            }
            else if(Convert.ToInt32(TextBox1.Text) == 0)//Convert.ToInt32轉換成int型別

            {
                Response.Write("零");
            }
            else
            {
                Response.Write("負數");
            }
        }

2.switch條件判斷

  • switch判斷式有兩個地方需要注意
    • 運算式的結果必須是整數(sbyte ,byte ,short ,ushort ,int ,uint ,long ,ulong)、列舉型態資料、字串(char)、字串(string)。
    • 每一個case敘述最後必須要加上break,表示離開switch判斷式。

    
        protected void Button2_Click(object sender, EventArgs e)
        {
            int month = DateTime.Today.Month;
            Response.Write("現在的月份:" + month + " ; ");
            switch(month)
            {
                case 1:
                    Response.Write("這個月有31天");
                    break;
                case 2:
                    Response.Write("這個月有28天");
                    break;
                default:
                    Response.Write("其他月份");
                    break;
            }
        }
結果:
現在的月份:1 ; 這個月有31天

3.foreach迴圈

  • foreach(型別 變數 in 集合或陣列名稱)
    {
            //重複執行的程式
    }
範例:

    
        protected void Page_Load(object sender, EventArgs e)
        {
            int[] lottos = { 10,24,33,7,16,11};
            foreach(int lotto in lottos)
            {
                Response.Write("樂透號碼為:" + lotto + " ; ");
            }
        }
結果:
樂透號碼為:10 ; 樂透號碼為:24 ; 樂透號碼為:33 ; 樂透號碼為:7 ; 樂透號碼為:16 ; 樂透號碼為:11 ;
範例:

    
        protected void Page_Load(object sender, EventArgs e)
        {
            string[] Books = { "ASP.NET", "ADO.NET", "C#" };
            foreach (string book in Books)
            {
                Response.Write("樂透號碼為:" + book + " ; ");
            }
        }
結果:
樂透號碼為:ASP.NET ; 樂透號碼為:ADO.NET ; 樂透號碼為:C# ; 

4.例外處理

  • try
    {
            //程式碼
    }
    catch
    {
           //例外處理程式碼
    }
範例:
    
            try
            {
                int en = int.Parse(TextBox1.Text);
                int code = int.Parse(TextBox2.Text);
                int total = en + code;
                Label2.Text = total.ToString();
            }
            catch(Exception ex)
            {
                Label2.Text = ex.Message;
            }
結果:
  • 也可自訂例外訊息
範例:
    
            try
            {
                int en = int.Parse(TextBox1.Text);
                int code = int.Parse(TextBox2.Text);
                int total = en + code;
                Label2.Text = total.ToString();
            }
            catch(Exception ex)
            {
                Label2.Text = "系統忙碌中....";
            }

  • 識別不同的例外
    • 通常使用者輸入一個無法轉成整數的值,像是abc、2008/01/06或是輸入超出int允許的範圍,則會發生溢位(Overflow)的錯誤,所以必須針對不同的例外顯示不同的錯誤訊息或是給予不同的錯誤處理方式
範例:
    
        protected void Button1_Click(object sender, EventArgs e)
        {
            try
            {
                int en = int.Parse(TextBox1.Text);
                int code = int.Parse(TextBox2.Text);
                int total = en + code;
                Label2.Text = total.ToString();
            }
            catch(FormatException fex)
            {
                Label2.Text = "請輸入整數資料";
            }
            catch (OverflowException oex)
            {
                Label2.Text = "資料過大造成錯誤";
            }
        }
  • 一般的Excption要放在最後

    
            try
            {
                int en = int.Parse(TextBox1.Text);
                int code = int.Parse(TextBox2.Text);
                int total = en + code;
                Label2.Text = total.ToString();
            }
            catch(FormatException fex)
            {
                Label2.Text = "請輸入整數資料";
            }
            catch (OverflowException oex)
            {
                Label2.Text = "資料過大造成錯誤";
            }
            catch(Exception ex)
            {
                Label2.Text = "系統忙碌中...";
            }

2014年1月11日 星期六

ASP.NET C# 字串處理 - 3(數值)

1.判斷是否為數值 TryParse

  • 若要檢查輸入的資料是否為數值,可呼叫數值型別的TryParse()方法檢查資料內容是否為數值。符合回傳True,只要出現數字以外的則回傳False
範例:

    
    public partial class Training1 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            string s1 = "三百";
            string s2 = "1000";
            string s3 = "2,000";
            string s4 = "-3000";
            string s5 = "4000d";
            int currentValue = 0;
            Response.Write(int.TryParse(s2,out currentValue)+"-"+currentValue+" ; ");
            Response.Write(int.TryParse(s3,out currentValue)+"-"+currentValue+" ; ");
            Response.Write(int.TryParse(s4,out currentValue)+"-"+currentValue+" ; ");
            Response.Write(int.TryParse(s5,out currentValue)+"-"+currentValue+" ; ");
        }
    }

結果:
True-1000 ; False-0 ; True--3000 ; False-0 ;

2.數值的格式化 decimal

  • 幾乎每個物件都會提供ToString()方法,用來將物件內容轉換成字串表示
  • 如果要將數字實數常值當成decimal處理,請使用後至字元m或M,例如
    decimal d = 12345.67M;
    如果沒有後置字元M,數字會被視為double處理,因而產生錯誤
  • 整數常值來初始化字元則不需要M,例如
    decimal d = 1234567;
數值格式名稱
範例
例子
G或g
123456.789
123456.789為例
C或c
NT$123456.789
123456.789為例
G或g
123456.789
123456.789為例
F或f
123456.79
123456.789為例
N或n
123,456.789
123456.789為例
P或p
24.13%
0.24125為例
E或e
1234568E+005
0.24125為例
X
7B
123為例
x
7b
123為例

3.資料型別轉換 Convert.

ToBoolean
轉換為bool型別
ToByte
轉換為byte型別
ToChar
轉換為Char型別
ToDateTime
轉換為DateTime型別
ToDouble
轉換為double型別
ToDecimal
轉換為decimal型別
ToInt32
轉換為int型別
ToInt64
轉換為long型別
ToInt16
轉換為Short型別
ToString
轉換為String型別

  • 隱含式資料型別轉換
    數值在不同變數之間傳遞時,需要從某種形別轉換成另一種型別來處理,例:
    int a = 123;
    long b = a;
  • 明確式資料型別轉換
    當資料從較大的資料型別轉換成較小的變數中使用,可能會造成資料損失,會產生錯誤
    例:
    int a = 12;
    byte b = (byte) a;


  • 建議使用資料轉換時,盡可能使用明確式資料轉換

2014年1月9日 星期四

C#日期格式化列表

使用函式 DateTime dt = DateTime.Now;

DateTime 格式轉換方法

方法
結果
dt.ToString();2005-11-5 13:21:25
dt.ToFileTime().ToString();127756416859912816
dt.ToFileTimeUtc().ToString();127756704859912816
dt.ToLocalTime().ToString();2005-11-5 21:21:25
dt.ToLongDateString().ToString();2005年11月5日
dt.ToLongTimeString().ToString();13:21:25
dt.ToOADate().ToString();38661.5565508218
dt.ToShortDateString().ToString();2005-11-5
dt.ToShortTimeString().ToString();//13:21
dt.ToUniversalTime().ToString();//2005-11-5 5:21:25
dt.Year.ToString();//2005
dt.Date.ToString();//2005-11-5 0:00:00
t.DayOfWeek.ToString();dSaturday
dt.DayOfYear.ToString();309
dt.Hour.ToString();13
dt.Millisecond.ToString();441
dt.Minute.ToString();30
dt.Month.ToString();11
dt.Second.ToString();28
dt.Ticks.ToString();632667942284412864
dt.TimeOfDay.ToString();13:30:28.4412864
dt.ToString();2005-11-5 13:47:04
dt.AddYears(1).ToString();2006-11-5 13:47:04
dt.AddDays(1.1).ToString();2005-11-6 16:11:04
dt.AddHours(1.1).ToString();2005-11-5 14:53:04
dt.AddMilliseconds(1.1).ToString();2005-11-5 13:47:04
dt.AddMonths(1).ToString();2005-12-5 13:47:04
dt.AddSeconds(1.1).ToString();2005-11-5 13:47:05
dt.AddMinutes(1.1).ToString();2005-11-5 13:48:10
dt.AddTicks(1000).ToString();2005-11-5 13:47:04
dt.CompareTo(dt).ToString();0
dt.Add(?).ToString();問號為一個時間段
dt.Equals("2005-11-6 16:11:04").ToString();False
dt.Equals(dt).ToString();True
dt.GetHashCode().ToString();1474088234
dt.GetType().ToString();System.DateTime
dt.GetTypeCode().ToString();DateTime
dt.GetDateTimeFormats('s')[0].ToString();2005-11-05T14:06:25
dt.GetDateTimeFormats('t')[0].ToString();14:06
dt.GetDateTimeFormats('y')[0].ToString();2005年11月
dt.GetDateTimeFormats('D')[0].ToString();2005年11月5日
dt.GetDateTimeFormats('D')[1].ToString();2005 11 05
dt.GetDateTimeFormats('D')[2].ToString();星期六 2005 11 05
dt.GetDateTimeFormats('D')[3].ToString();星期六 2005年11月5日
dt.GetDateTimeFormats('M')[0].ToString();11月5日
dt.GetDateTimeFormats('f')[0].ToString();2005年11月5日 14:06
dt.GetDateTimeFormats('g')[0].ToString();2005-11-5 14:06
dt.GetDateTimeFormats('r')[0].ToString();Sat, 05 Nov 2005 14:06:25 GMT

String.Format 日期格式化方法

string.Format("{0:d}",dt);//2005-11-5
string.Format("{0:D}",dt);//2005年11月5日
string.Format("{0:f}",dt);//2005年11月5日 14:23
string.Format("{0:F}",dt);//2005年11月5日 14:23:23
string.Format("{0:g}",dt);//2005-11-5 14:23
string.Format("{0:G}",dt);//2005-11-5 14:23:23
string.Format("{0:M}",dt);//11月5日
string.Format("{0:R}",dt);//Sat, 05 Nov 2005 14:23:23 GMT
string.Format("{0:s}",dt);//2005-11-05T14:23:23
string.Format("{0:t}",dt);//14:23
string.Format("{0:T}",dt);//14:23:23
string.Format("{0:u}",dt);//2005-11-05 14:23:23Z
string.Format("{0:U}",dt);//2005年11月5日 6:23:23
string.Format("{0:Y}",dt);//2005年11月
string.Format("{0}",dt);//2005-11-5 14:23:23
string.Format("{0:yyyyMMddHHmmssffff}",dt);


其它方法

元年轉換DataTime ('20101025'):
string redate1 = "20101025";
DataTime dt = DateTime.ParseExact(redate1, "yyyyMMdd", Nothing, System.Globalization.DateTimeStyles.AllowWhiteSpaces);

日期比較:
if (DateTime.Compare(date1, date2) > 0) {
    date1 > date2 
} else {
    date1 < date2
}

計算2個日期之間的天數差:
DateTime dt1 = Convert.DateTime("2007-8-1");  
DateTime dt2 = Convert.DateTime("2007-8-15"); 
TimeSpan span = dt2.Subtract(dt1);            
int dayDiff = span.Days + 1;                  

計算某年某月的天數:
int days = DateTime.DaysInMonth(2007, 8);     
days = 31;                                    

給日期增加一天、減少一天:
DateTime dt =DateTime.Now;
dt.AddDays(1); //增加一天
dt.AddDays(-1);//減少一天
其它年份方法類似...

Oracle SQL裡轉換日期函數:
to_date("2007-6-6",'YYYY-MM-DD");
to_date("2007/6/6",'yyyy/mm/dd");

2014年1月6日 星期一

ASP.NET C# 字串處理 - 2(日期時間)

1.現在的日期、時間 DateTime

  • 在C#中可以透過DateTime物件的Now及Today屬性回傳
範例:

    
        protected void Page_Load(object sender, EventArgs e)
        {
            Response.Write(DateTime.Now);
            Response.Write(DateTime.Today);
        }
結果:
2014/1/7 上午 01:37:37
2014/1/7 上午 12:00:00 

2.傳回年、月、日、時、分、秒

  • 在C#中設定一個DateTime變數內容可以將年、月、日、時、分、秒當作參數帶入設定
例:DateTime dt = new DateTime(2008, 1, 1, 18, 30, 30);
  • .NET也將所有的日期時間視為物件,年、月、日、時、分、秒則是日期本身的一部分,因此只要用Year , Month , Day , Hour , Minute , Second屬性,便可知道日期時間的年、月、日、時、分、秒
範例:
    
        protected void Page_Load(object sender, EventArgs e)
        {
            DateTime dt = new DateTime(2008,1,1,18,30,30);
            Response.Write(dt.Year + " ; ");
            Response.Write(dt.Month + " ; ");
            Response.Write(dt.Day + " ; ");
            Response.Write(dt.Hour + " ; ");
            Response.Write(dt.Minute + " ; ");
            Response.Write(dt.Second + " ; ");
        }
結果:
2008 ; 1 ; 1 ; 18 ; 30 ; 30 ;

3.今天星期幾? DayOfWeek

  • 檢查日期時間的DayOfWeek屬性可以告訴你今天星期幾:
範例:

    
    public partial class Training1 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            Response.Write(DateTime.Now.DayOfWeek);
        }
    }
結果:
Wednesday

  • Response.Write(DateTime.Now.DayOfWeek.GetHashCode());則是回傳數字,星期二就是2,星期日則是0

4.判斷是否為日期時間? DateTime.TryParse

  • DateIme的TryParse()方法可以協助判斷資料是否為正確的日期格式及可能的日期。也可以檢查時間,使用DateTime的TryParse()方法第一個參數傳入預判斷的日期時間,第二個參數一個日期物件,已取得判斷所得結果。
    
        protected void Page_Load(object sender, EventArgs e)
        {
            DateTime dt;
            Response.Write(DateTime.TryParse("mar 12,2008", out dt)+" , "+dt);
        }
結果:
True , 2008/3/12 上午 12:00:00

5.日期時間的格式化? 

  • 對一個日期時間直接呼叫其ToString()方法會顯示完整的日期時間:
    Response.Write(DateTime.Now.ToString());
  • 若只想取出日期貨時間的部分,並且以簡短或完整的日期時間格式顯示,則可在呼叫ToString()方法時,指定預先定義的日期與時間隔式名稱:
範例:

    
    public partial class Training1 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            Response.Write(DateTime.Now.ToString("d")+" , ");
            Response.Write(DateTime.Now.ToString("D") + " , ");
            Response.Write(DateTime.Now.ToString("t") + " , ");
            Response.Write(DateTime.Now.ToString("T") + " , ");
        }
    }
結果:
2014/1/9 , 2014年1月9日 , 下午 11:15 , 下午 11:15:20 ,

  • Response.Write(DateTime.Now.ToString("yy-MM-dd"));//14-01-09
  • 若上一行程式MM改為小寫的mm,此時mm代屌的是分鐘數而非月份
    Response.Write(DateTime.Now.ToString("yy-mm-dd"));//14-55-09        //14年55分09日
  • 若是使用一個格式字元,像是h,m,s,y,d,M必須在字元前面加上%
    Response.Write(DateTime.Now.ToString("%h"));//11      //假設現在11點
  • 單獨自元要在前面加上%字元的真正原因:與.NET預先定義的日期時間格式名稱有所區別
    Response.Write(DateTime.Now.ToString("%M"));// 1
    Response.Write(DateTime.Now.ToString("M"));//1月09日

6.日期時間的加減 

  • 日期相加可以使用AddDays()、AddMonths()、AddHours()
範例:

    
    public partial class Training1 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            Response.Write(DateTime.Now.ToString());
            Response.Write(" ; ");
            Response.Write(DateTime.Now.AddDays(5).ToString());
            Response.Write(" ; ");
            Response.Write(DateTime.Now.AddDays(-5).ToString());
        }
    }
結果:
2014/1/10 上午 12:14:49 ; 2014/1/15 上午 12:14:49 ; 2014/1/5 上午 12:14:49
  • 傳入正數為相加,傳入負數為相減

兩個日期時間的差距  Subtract()、TimeSpan

範例:
    
    public partial class Training1 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            DateTime dt = new DateTime(2014, 11, 17);
            TimeSpan ts = dt.Subtract(DateTime.Now);
            Response.Write("現在距離我生日還有:" + ts.Days.ToString() + "天 ; ");
            Response.Write("現在距離我生日還有:" + ts.TotalHours.ToString() + "小時 ; ");
            Response.Write("現在距離我生日還有:" + ts.TotalMinutes.ToString() + "分鐘 ; ");
            Response.Write("現在距離我生日還有:" + ts.TotalSeconds.ToString() + "秒");
        }
    }
結果:
現在距離我生日還有:310天 ; 現在距離我生日還有:7463.53980021022小時 ; 現在距離我生日還有:447812.388012613分鐘 ; 現在距離我生日還有:26868743.2807568秒 

2014年1月4日 星期六

ASP.NET C# 字串處理


1.串連兩個字串

範例:
    
public partial class Training1 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            string s1 = "This is : ";
            string s2 = "ASP.NET";
            Response.Write(s1 + s2);
        }
    }

結果:
This is : ASP.NET


2.大小寫轉換 ToUpper()(大寫)、ToLower()(小寫)

範例:

    
        protected void Page_Load(object sender, EventArgs e)
        {
            string bookName = "Visual C# for ASP.NET";
            Response.Write(bookName.ToUpper());
            Response.Write(bookName.ToLower());
        }
結果:
VISUAL C# FOR ASP.NET
visual c# for asp.net 



3.去除前後空白 Trim()

範例:

    
    public partial class Training1 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            string bookName = "    Visual C# for ASP.NET     ";
            Response.Write("["+bookName.Trim()+"]");
        }
    }
結果:
[Visual C# for ASP.NET] 
註:
Trim()只可以去除前後空字串,不可去除Visual C# for ASP.NET中的空白字元,如需要去除字串中的空字元須使用Replace()
若只想去除字串前的空白字串可使用TrimStart()
若只想去除字串前的空白字串可使用TrimEnd()



4.字串長度 Length.ToString()

範例:

    
    public partial class Training1 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            string bookName = "Visual C# for ASP.NET";
            Response.Write("字串長度 : "+bookName.Length.ToString());
        }
    }
結果:
字串長度 : 21


5.取出部分字串 Substring()

範例:

    
    public partial class Training1 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            string question = "Do you like ASP.NET";
            Response.Write(question.Substring(12));
        }
    }
結果:
ASP.NET?
註:
Substring()的第一個數字指定要從哪個字開始取出到最後一個字元,
以上面範例為從第13個字元取到最後一個字元,第一個位置為0。

如果要取出字串中區間字元的話則使用Substring(12,7)
則取出第13個字元到後面7個
範例:
    
    public partial class Training1 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            string question = "Do you like ASP.NET?";
            Response.Write(question.Substring(12,7));
        }
    }
結果:
ASP.NET


6.判斷某個字出現的位置  IndexOf()

範例:

    
    public partial class Training1 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            string companyName = "ASPNET Company";
            Response.Write("字母A出線的位置"+companyName.IndexOf("A"));
        }
    }
結果:
字母A出現的位置0 

註:
IndexOf()方法是會分大小寫的,因此把A換成a的話

    
    public partial class Training1 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            string companyName = "ASPNET Company";
            Response.Write("字母a出現的位置"+companyName.IndexOf("a"));
        }
    }
結果:
字母a出現的位置11

 若要IndexOf()不區分大小寫的話需使用CurrentCultureIgnoreCase

    
    public partial class Training1 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            string companyName = "ASPNET Company";
            Response.Write("字母a(不區分大小寫)出現的位置"+companyName.IndexOf("a",StringComparison.CurrentCultureIgnoreCase));
        }
    }

結果:
字母a(不區分大小寫)出現的位置0 


StringComparison.CurrentCultureIgnoreCase就是不區分大小寫


    
    public partial class Training1 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            string companyName = "ASPNET Company";
            Response.Write("字母A出現的位置"+companyName.IndexOf("A"));

            Response.Write("字母A出現的位置" + companyName.IndexOf("A",7));
        }
    }

結果:
字母A出現的位置0字母A出現的位置-1
註:
若IndexOf("A",7)則是從第8個字母開始找,如沒有找到則回傳-1

7.取代字串的內容  Replace()

範例:
    
    public partial class Training1 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            string companyName = "ASPNET Company";
            Response.Write(companyName.Replace("ASPNET","JAVA"));
        }
    }

結果:
JAVA Company

  • 使用Replace()可去除字串中所有的空白,以下為將空白替換成空字串,以達到空白的效果


    
    public partial class Training1 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            string s = "Visual    C#";
            Response.Write(s.Replace(" ", ""));
        }
    }
結果:
VisualC#

8.將字串分割成字串陣列  Split()


  • 字串EmpName裡放一堆英文名字,每個英文名字間都以逗號分隔。透過字串變數本身的Split(),將字串EmpName依逗號(',')進行切割。

範例:

    
    public partial class Training1 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            string EmpName = "Adams,Richard,Jerry,Sophie";
            string[] EmpArray = EmpName.Split(new char[]{','});
            Response.Write("陣列長度:"+EmpArray.Length.ToString());
            Response.Write(" ; ");
            Response.Write("第一個名字是:" + EmpArray[0]);
        }
    }
結果:
陣列長度:4 ; 第一個名字是:Adams

  • 取出最後一個單字,須先判斷最後一個索引值為多少
範例:

    
        protected void Page_Load(object sender, EventArgs e)
        {
            string EmpName = "Adams,Richard,Jerry,Sophie";
            string[] EmpArray = EmpName.Split(new char[]{','});
            Response.Write("陣列長度:"+EmpArray.Length.ToString());
            Response.Write(" ; ");
            Response.Write("最後一個名字是:" + EmpArray[EmpArray.Length-1]);
        }
結果:
陣列長度:4 ; 第一個名字是:Sophie

  • 將陣列轉換成字串則使用String.Join()方法
範例:

    
        protected void Page_Load(object sender, EventArgs e)
        {
            string[] EmpNames = {"Adams","Richard","Jerry","Sophie"};
            string Employees = string.Join(";", EmpNames);
            Response.Write(Employees);
        }
結果:
Adams;Richard;Jerry;Sophie

9.字串的格式化  

  • 以下面這段程式為例,最後若要將 i , j , total變數與一些字串混合顯示,Response.Write()時要穿插許多+運算子:
範例:

    
    public partial class Training1 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            int i = 10;
            int j = 20;
            int total = i + j;
            Response.Write(i.ToString() + "+" + j.ToString() + "運算結果為:" + total.ToString());
        }
    }
結果:
10+20運算結果為:30 

  • 這樣寫並沒有錯,但是Response.Write納行很亂,要變更顯示方法時得想一下才知道如何改。
  • String本身有提供一個Format()方法,他可以將多個變數格式化成指定的方法呈現。
範例:

    
        protected void Page_Load(object sender, EventArgs e)
        {
            int i = 10;
            int j = 20;
            int total = i + j;
            String s = String.Format("{0}+{1}運算結果為:{2}", i, j, total);
            Response.Write(s);
        }
結果:
10+20運算結果為:30 

  • 除了固定的字元外,還可看到用一些大括號括起來的數字,像是{0} , {1} , {2},這些就代表變數要出現的位置,例:{0}就是變數 i 。