【推荐】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 |
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:
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%
来源:oschina
链接:https://my.oschina.net/u/112092/blog/36959