前记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%