C#字符串处理积累(一)

来源:互联网 发布:js无限循环数组输出 编辑:程序博客网 时间:2024/06/06 05:09

1.把string类型转换为int类型有三种方法:

Convert.ToInt32(myString), Int32.Parse(myString);Int32.TryParse(myString, out myint);

 

using System;
using System.Collections.Generic;
using System.Text;

namespace ConsoleApplication1
...
{
    
class Program
    ...
{
        
static void Main(string[] args)
        ...
{
            
string myString = "1234";
            
int myint = 0;

            myint 
= Convert.ToInt32(myString);
            Console.Write(myint
+"  ");

            myint 
= Int32.Parse(myString);
            Console.Write(myint
+"  ");

            Int32.TryParse(myString, 
out myint);
            Console.Write(myint
+" ");

        }

    }

}

//string myString = "1234";
            string myString = null;
            int myint = 0;

            myint = Convert.ToInt32(myString);
            Console.Write(myint+"/r/n");

            myint = Int32.Parse(myString);
            Console.Write(myint+"/r/n");

            Int32.TryParse(myString, out myint);
            Console.Write(myint+"/r/n");
这次字符串是null,那么运行结果会怎样呢?Convert.ToInt32()null时不抛异常而是返回0;
Int32.Parse()抛异常
Int32.TryParse()不抛异常,会返回true或false来说明解析是否成功,如果解析错误,调用方将会得到0值。

3个方法几乎没有差异!
如果真要追求完美那么性能的差异是:Int32.TryParse()优于Int32.Parse()优于Convert.ToInt32()。
所以个人建议:.NET1.1下用Int32.Parse();.NET2.0用Int32.TryParse()。

那么为什么会这样呢?
其实这些数据不是偶然的,因为:
Convert.ToInt32 会把最终的解析工作代理给 Int32.Parse;
Int32.Parse 会把最终的解析工作代理给Number.ParseInt32;
Int32.TryParse 会把最终的解析工作代理给Number.TryParseInt32。

2.@"abc"和"abc"区别在那里

@"abc"和"abc"没有什么区别

不过@是忽略转义字符的!
比如 "abc/n" 输出 abc 并加个换行
但是 @"abc/n" 输出 abc/n 无换行!
取消转义

比如你想将 C:/windows/system 这个字符串赋值给 str

一般情况下要:
string str = "C://windows//system";

因为在C#中,// 才会被转义成一个 /
又例如/n就是换行符

而加入@,就可以这样:

string str = @"C:/windows/system";

3.把123456789转换为12-345-6789的3种方法

方法一:
 


 


 

 

            string a = "123456789";
            a 
= int.Parse(a).ToString("##-###-####");
            Console.Write(a);

 

方法二:

string a = "123456789";
            a 
= a.Insert(5"-").Insert(2"-");
            Console.Write(a);


方法三:

using System;
using System.Collections.Generic;
using System.Text;
using System.Text.RegularExpressions;
namespace ConsoleApplication1
{
    
class Program
    
{
        
static void Main()
        
{
            
string a = "123456789";

            Regex reg 
= new Regex(@"^(d{2})(d{3})(d{4})$");
            a 
= reg.Replace(a, "$1-$2-$3");
            Console.Write(a);
        }

        
    }

}

 

4.输出21个AAAAAAAAAAAAAAAAAAAAA的巧妙做法

new构造器的理解
如果要你创建一个由21个"A"字符构成的字符串,你会怎么做?
string str = "AAAAAAAAAAAAAAAAAAAAA";//老实型
string str = new string(
'A', 21);//简单聪明

5. 判断空字符串的三种方法的比较:

string a="";
1.if(a=="")
2.if(a==String.Empty)
3.if(a.Length==0)

其中就其执行速度来说又快到慢是:3,2,1.

1.if(a=="") // ""需要实例化一个String对象,最差
2.if(a==String.Empty) // String.Empty是常量,不需要实例化
3.if(a.Length==0) // a.Length虽然最快,但是语意不如第2种清晰

另,String.IsNullOrEmpty(value)判断的是该字符串是非为空,或者为空字符串.

结论:推荐使用2.if(a==String.Empty),安全,稳定,语意清晰

 

原创粉丝点击