惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Help Net Security
Help Net Security
G
Google Developers Blog
雷峰网
雷峰网
WordPress大学
WordPress大学
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Engineering at Meta
Engineering at Meta
Security Latest
Security Latest
T
Threat Research - Cisco Blogs
AWS News Blog
AWS News Blog
F
Full Disclosure
C
Cybersecurity and Infrastructure Security Agency CISA
T
The Exploit Database - CXSecurity.com
J
Java Code Geeks
U
Unit 42
C
Cyber Attacks, Cyber Crime and Cyber Security
V
V2EX
C
Cisco Blogs
博客园 - 司徒正美
Project Zero
Project Zero
L
LINUX DO - 热门话题
阮一峰的网络日志
阮一峰的网络日志
Blog — PlanetScale
Blog — PlanetScale
Scott Helme
Scott Helme
A
About on SuperTechFans
Hugging Face - Blog
Hugging Face - Blog
S
Securelist
小众软件
小众软件
aimingoo的专栏
aimingoo的专栏
S
Schneier on Security
G
GRAHAM CLULEY
酷 壳 – CoolShell
酷 壳 – CoolShell
Cyberwarzone
Cyberwarzone
MongoDB | Blog
MongoDB | Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园 - 叶小钗
T
Threatpost
Recorded Future
Recorded Future
C
CXSECURITY Database RSS Feed - CXSecurity.com
宝玉的分享
宝玉的分享
N
News and Events Feed by Topic
人人都是产品经理
人人都是产品经理
The Register - Security
The Register - Security
S
Security Archives - TechRepublic
博客园 - Franky
N
News | PayPal Newsroom
Simon Willison's Weblog
Simon Willison's Weblog
S
SegmentFault 最新的问题
W
WeLiveSecurity
A
Arctic Wolf
B
Blog

博客园 - leup

一个硬盘的故事 Orcale 临时表 SQL Server 与Oracle的不同点(从微观上) Oracle中Decode()函数使用技巧 oracle 日期函数介绍 Oracle SQLPLUS命令大全 Oracle 自动生成编号(实现sqlserver自增长字段) Oracle 函数介绍之 分析函数 Oracle 表内部字段产生树状结构的处理 oracle与sqlserver比较 Nhibernate开发资料收集 OWC winform Sample Demo 创建DataTable,并填充数据,模拟数据库中的表 GridView 使用技巧收集 【转】asp.net2.0学习历程 菜鸟到中级程序员的飞跃---30本好书点评 【转】ASP.NET2.0轻松搞定统计图表 【转】ASP.NET2.0 文件图片处理1 ASP.NET2.0 遍历文件夹下所有图片 ASP.NET2.0 ReportingServices 整理1
【转】C#优化字符串操作
leup · 2007-10-11 · via 博客园 - leup

1.Convert.ToInt32与Int32.Parse的恩恩怨怨
2.
Split的3种用法
3.
@"abc"和"abc"区别在那里
4.保留2位有效小数及
5.
url传递中文的解决方案
6.
把123456789转换为12-345-6789的3种方法
7.交换两个指定位置字符的4种方法
8.“%10”的妙用
9.输出21个AAAAAAAAAAAAAAAAAAAAA的巧妙做法

1.Convert.ToInt32Int32.Parse的恩恩怨怨

这2个方法都可以把把string解析为int,那么我们一定会有疑问:到底他们有什么区别?什么时候该用什么?性能如何等等。

其实在2.0里还有Int32.TryParse也实现了同样的效果。

 

表面上看,可见3个方法都实现了同样的效果!

那么我们把代码改一下:

            //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值。

由于Convert.ToInt32()在null时我们看不到Int32.TryParse()的运行结果所以再分调试和不调试来看结果的差异:
调试:

不调试:

其实一般出bug毕竟属于少数,而且大家都会测试保证不出bug,那么我们最关心的或许就是性能。

再把代码修改一下:
2

我们让3个方法执行100万次转换毫秒差异:

为了准确多做几次测试:
第二次

第三次

  第一次 第二次 第三次
Convert.ToInt32() 532-204=328 1163-750=413 782-469=313
Int32.Parse() 844-532=312 360-63=297 1094-782=312
Int32.TryParse() 1141-844=297 657-360=297 375-94=281

其实我们可以得出结论:
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。

至于其他进制的转换请参考MSDN。重载参数即可!

2.Split的3种用法

我们可以把12     33   456    12342  拼起来就是一个字符,因为很多时候我们觉得处理只有几个组的时候用数组很麻烦所以我们用“|”或者“,”等等把他们拼起来在需要的时候用Split打散即可。//清清月儿 http://blog.csdn.net/21aspnet/

下面列举一些用法,不做性能分析了。
方法一:

方法二:

方法三:

static void Main(string[] args)
        
{
            
string a = "1,2,3,4,5,6,7,8,9";
            
string b = ",";
            
string[] c = Split(a, b);
            
foreach (string bb in c)
            
{
                Console.Write(bb 
+ " \r\n");
            }


        }

        
public static string[] Split(string input, string pattern)
        
{
            
string[] arr = System.Text.RegularExpressions.Regex.Split(input, pattern);
            
return arr;
        }

实现把文章按空格打散:

3.@"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";

4.保留2位有效小数及
这又是一个经常遇到的问题。

保留2位有效小数(和保留N位一样的参数不同而已):


四舍五入:

5.url传递中文的解决方案

1.设置web.config文件。
<system.web>
......
<globalization requestEncoding="gb2312" responseEncoding="gb2312" culture="zh-CN" fileEncoding="gb2312" />
......
</system.web>
2.传递中文之前,将要传递的中文参数进行编码,在接收时再进行解码。
>> 进行传递
string Name = "中文参数";
Response.Redirect("B.aspx?Name="+Server.UrlEncode(Name));
>> 进行接收
string Name = Request.QueryString["Name"];
Response.Write(Server.UrlDecode(Name));

3.如果是从 .HTML 文件向 .Aspx 文件进行传递中文参数的话(即不从后台用 Redirect()方法进行 Url 转换)。一样要将传递的中文参数进行编码,在接收时再进行解码。
>> 进行传递
<script language="JavaScript">
function GoUrl()
{
var Name = "中文参数";
location.href = "B.aspx?Name="+escape(Name);
}
</script>
<body onclick="GoUrl()">
>> 进行接收
string Name = Request.QueryString["Name"];
Response.Write(Server.UrlDecode(Name));

一般来说。设置web.config文件就可以了。但是如果你用 JavaScript 调用 webservice 方法的话(往webservice里面传递中文参数)。设置 web.config 文件好象无效。 //清清月儿http://blog.csdn.net/21aspnet/

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

方法二:

方法三:

7.交换两个指定位置字符的4种方法方法一:

方法二:

方法三:

方法四:

8. “%10”的妙用

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

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

10.compare()与compareTo()方法

一样的功能,只是两个接口的两个方法而已  
  compare是Comparatable的方法,compareTo是Comparator的方法