c#语言学习 专题二 String

淺唱寂寞╮ 提交于 2019-12-24 16:35:48

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

前记

    msdn上前几个部分我就不说了吧!就从string开始说起!一个程序员的职业生涯很多时候都是在跟这个东西打交道!

内容

    一,string和String

    MSDN中对string的说明:

    string is an alias for String in the .NET Framework。string是String的别名而已,string是c#中的类,String是Framework的类,C# string 映射为 Framework的 String。如果用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是c#中的类,String是.net Framework的类(在c# IDE中不会显示蓝色)

    c# string映射为.net Framework的String

    如果用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#格式化数值结果表

字符

说明

示例

输出

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

Strings

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 <-

Numbers

Basic number formatting specifiers:

 

Specifier Type Format

Output 
(Passed 
Double 1.42)

Output 
(Passed 
Int -12400)

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:

Dates

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

Enumerations

 

Specifier Type
g Default (Flag names if available, otherwise decimal)
f Flags always
d Integer always
x Eight digit hex.

Some Useful Examples

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%

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!