前記html
msdn上前幾個部分我就不說了吧!就從string開始提及!一個程序員的職業生涯不少時候都是在跟這個東西打交道!
git
內容程序員
一,string和String
c#
MSDN中對string的說明:post
string is an alias for String in the .NET Framework。string是String的別名而已,string是c#中的類,String是Framework的類,C# string 映射爲 Framework的 String。若是用string,編譯器會把它編譯成String,因此若是直接用String就可讓編譯器少作一點點工做。ui
若是使用C#,建議使用string,比較符合規範 。 string始終表明 System.String(1.x) 或 ::System.String(2.0) ,String只有在前面有using System;的時候而且當前命名空間中沒有名爲String的類型(class、struct、delegate、enum)的時候才表明System.String。this
string是c#中的類,String是.net Framework的類(在c# IDE中不會顯示藍色)spa
c# string映射爲.net Framework的String.net
若是用string,編譯器會把它編譯成String,因此若是直接用String就可讓編譯器少作一點點工做指針
若是使用c#,建議使用string,比較符合規範
string始終表明 System.String(1.x) 或 ::System.String(2.0) ,String只有在前面有using System;的時候而且當前命名空間中沒有名爲String的類型(class、struct、delegate、enum)的時候才表明System.String
string是關鍵字,String不是,也就是說string不能做爲類、結構、枚舉、字段、變量、方法、屬性的名稱,而String能夠。
以上摘自:http://www.cnblogs.com/albertly/archive/2008/11/18/1335823.html
二,String.empty,null,""比較
首先,要先對一個容易出錯的地方提早作出說明。string.equals(string str),和」==「。==是指指針級別的,當數據類型爲爲原子類型時,能夠用==比較是否相等,可是,非原子類型,如string時,==比較的的是對象的惟一標識。普通的對象使用==時,比較的是對象的惟一標識,即(object==object2)即便內容相同,結果也爲false;可是,string的==已經被重載。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleTest
{
class Program
{
static string emstr = "wxw";
static void Main(string[] args)
{
string str = "";
string strempty = string.Empty;
string strnull = null;
if (str.Equals(strempty))
{
System.Console.WriteLine("\"\" equals empty!");
}else
{
System.Console.WriteLine("\"\" not equals empty!");
}
//運行結果爲:"" equals empty
if (str.Equals(strnull))
{
System.Console.WriteLine("\"\" equals null!");
}
else
{
System.Console.WriteLine("\"\" not equals null!");
}
//運行結果:"" not equals null!
//strnull.Equals(strempty);
if (strempty.Equals(strnull))
{
System.Console.WriteLine("empty equals null!");
}
else
{
System.Console.WriteLine("empty equals null!");
}
//運行結果:empty equals null!
if(strempty==strnull)
{
System.Console.WriteLine("empty equals null!");
}
else
{
System.Console.WriteLine("empty equals null!");
}
//運行結果:empty equals null
if (strnull == strempty)
{
System.Console.WriteLine("empty equals null!");
}
else
{
System.Console.WriteLine("empty not equals null!");
}
//運行結果:empty not equals null!
//緣由是因爲,第一個參數是null類型對象,按照普通對象進行比較!
if ("viwii" == "viwii")
{
System.Console.WriteLine("equal!");
}
else
{
System.Console.WriteLine("not equal!");
}
//運行結果:equal
string strequal = "wxw";
string strequal1 = "wxw";
if (emstr == strequal1)
{
System.Console.WriteLine("equal!");
}
else
{
System.Console.WriteLine("not equal!");
}
//運行結果:equal!
System.Console.ReadKey();
}
}
}
注意,一個可能爲null的字符串不可使用equals方法,會報出異常:未將對象引用設置到對象實例!
三,String和StringBuilder
當作字符串鏈接時,可直接採用String+方法,可是當須要作大量字符串鏈接時,建議使用StringBuilder,從內存利用,效率等各個方面來見,StringBuilder都能高出多個數量級!
四,string經常使用方法
詳細的使用信息能夠收索String!這裏僅對個別方法進行說明。
1> string.format (如下偷懶了,摘自別人的博客,但忘記了出處,遺憾!)
字符 |
說明 |
示例 |
輸出 |
C | 貨幣 | string.Format("{0:C3}", 2) | $2.000 |
D | 十進制 | string.Format("{0:D3}", 2) | 002 |
E | 科學計數法 | 1.20E+001 | 1.20E+001 |
G | 常規 | string.Format("{0:G}", 2) | 2 |
N | 用分號隔開的數字 | string.Format("{0:N}", 250000) | 250,000.00 |
X | 十六進制 | string.Format("{0:X000}", 12) | C |
string.Format("{0:000.000}", 12.2) | 012.200 |
There really isn't any formatting within a strong, beyond it's alignment. Alignment works for any argument being printed in a String.Format call.
Sample | Generates |
String.Format("->{1,10}<-", "Hello"); | -> Hello<- |
String.Format("->{1,-10}<-", "Hello"); | ->Hello <- |
Basic number formatting specifiers:
Specifier | Type | Format | Output |
Output |
c | Currency | {0:c} | $1.42 | -$12,400 |
d | Decimal (Whole number) | {0:d} | System. FormatException |
-12400 |
e | Scientific | {0:e} | 1.420000e+000 | -1.240000e+004 |
f | Fixed point | {0:f} | 1.42 | -12400.00 |
g | General | {0:g} | 1.42 | -12400 |
n | Number with commas for thousands | {0:n} | 1.42 | -12,400 |
r | Round trippable | {0:r} | 1.42 | System. FormatException |
x | Hexadecimal | {0:x4} | System. FormatException |
cf90 |
Custom number formatting:
Specifier | Type | Example | Output (Passed Double 1500.42) | Note |
Zero placeholder | {0:00.0000} | 1500.4200 | Pads with zeroes. | |
# | Digit placeholder | {0:(#).##} | (1500).42 | |
. | Decimal point | {0:0.0} | 1500.4 | |
, | Thousand separator | {0:0,0} | 1,500 | Must be between two zeroes. |
,. | Number scaling | {0:0,.} | 2 | Comma adjacent to Period scales by 1000. |
% | Percent | {0:0%} | 150042% | Multiplies by 100, adds % sign. |
e | Exponent placeholder | {0:00e+0} | 15e+2 | Many exponent formats available. |
; | Group separator | see below |
The group separator is especially useful for formatting currency values which require that negative values be enclosed in parentheses. This currency formatting example at the bottom of this document makes it obvious:
Note that date formatting is especially dependant on the system's regional settings; the example strings here are from my local locale.
Specifier | Type | Example (Passed System.DateTime.Now) |
d | Short date | 10/12/2002 |
D | Long date | December 10, 2002 |
t | Short time | 10:11 PM |
T | Long time | 10:11:29 PM |
f | Full date & time | December 10, 2002 10:11 PM |
F | Full date & time (long) | December 10, 2002 10:11:29 PM |
g | Default date & time | 10/12/2002 10:11 PM |
G | Default date & time (long) | 10/12/2002 10:11:29 PM |
M | Month day pattern | December 10 |
r | RFC1123 date string | Tue, 10 Dec 2002 22:11:29 GMT |
s | Sortable date string | 2002-12-10T22:11:29 |
u | Universal sortable, local time | 2002-12-10 22:13:50Z |
U | Universal sortable, GMT | December 11, 2002 3:13:50 AM |
Y | Year month pattern | December, 2002 |
The 'U' specifier seems broken; that string certainly isn't sortable.
Custom date formatting:
Specifier | Type | Example | Example Output |
dd | Day | {0:dd} | 10 |
ddd | Day name | {0:ddd} | Tue |
dddd | Full day name | {0:dddd} | Tuesday |
f, ff, ... | Second fractions | {0:fff} | 932 |
gg, ... | Era | {0:gg} | A.D. |
hh | 2 digit hour | {0:hh} | 10 |
HH | 2 digit hour, 24hr format | {0:HH} | 22 |
mm | Minute 00-59 | {0:mm} | 38 |
MM | Month 01-12 | {0:MM} | 12 |
MMM | Month abbreviation | {0:MMM} | Dec |
MMMM | Full month name | {0:MMMM} | December |
ss | Seconds 00-59 | {0:ss} | 46 |
tt | AM or PM | {0:tt} | PM |
yy | Year, 2 digits | {0:yy} | 02 |
yyyy | Year | {0:yyyy} | 2002 |
zz | Timezone offset, 2 digits | {0:zz} | -05 |
zzz | Full timezone offset | {0:zzz} | -05:00 |
: | Separator | {0:hh:mm:ss} | 10:43:20 |
/ | Separator | {0:dd/MM/yyyy} | 10/12/2002 |
Specifier | Type |
g | Default (Flag names if available, otherwise decimal) |
f | Flags always |
d | Integer always |
x | Eight digit hex. |
String.Format("{0:$#,##0.00;($#,##0.00);Zero}", value);
This will output "$1,240.00" if passed 1243.50. It will output the same format but in parentheses if the number is negative, and will output the string "Zero" if the number is zero.
String.Format("{0:(###) ###-####}", 18005551212);
This will output "(800) 555-1212".
變量.ToString()
字符型轉換 轉爲字符串 12345.ToString("n"); //生成 12,345.00 12345.ToString("C"); //生成 ¥12,345.00 12345.ToString("e"); //生成 1.234500e+004 12345.ToString("f4"); //生成 12345.0000 12345.ToString("x"); //生成 3039 (16進制) 12345.ToString("p"); //生成 1,234,500.00%