C# 字符串详细使用
转自 http://www.cnblogs.com/candywyq/archive/2007/07/24/830021.html
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.ToInt32与Int32.Parse的恩恩怨怨
这2个方法都可以把把string解析为int,那么我们一定会有疑问:到底他们有什么区别?什么时候该用什么?性能如何等等。
其实在2.0里还有Int32.TryParse也实现了同样的效果。
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+"\r\n ");
myint = Int32.Parse(myString);
Console.Write(myint+"\r\n ");
Int32.TryParse(myString, out myint);
Console.Write(myint+"\r\n");
}
}
}
表面上看,可见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
string myString1 = "1234";
//string myString = null;
int myint = 0;
Console.Write(System.DateTime.Now.ToString()+" "+System.DateTime.Now.Millisecond.ToString() + " ");
for (int i = 0; i < 1000000;i++ )
{
myint = Convert.ToInt32(myString1);
}
Console.Write(myint + " \r\n");
Console.Write(System.DateTime.Now.ToString() + " " + System.DateTime.Now.Millisecond.ToString() + "\r\n ");
string myString2 = "1234";
for (int i = 0; i < 1000000; i++)
{
myint = Int32.Parse(myString2);
}
Console.Write(myint + "\r\n ");
Console.Write(System.DateTime.Now.ToString() + " " + System.DateTime.Now.Millisecond.ToString() + " ");
string myString3 = "1234";
for (int i = 0; i < 1000000; i++)
{
Int32.TryParse(myString3, out myint);
}
Console.Write(myint + "\r\n ");
Console.Write(System.DateTime.Now.ToString() + " " + System.DateTime.Now.Millisecond.ToString() + "\r\n ");
我们让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 aa = "1234,234523,4324,324";
string[] cc = aa.Split(new char[] { ',' });
foreach (string bb in cc)
{
Console.Write(bb + "\r\n ");
}
}
方法二:
string aa = "1234,234523,4324,324";
string[] str = aa.Split(',');
foreach (string bb in str)
{
Console.Write(bb + " \r\n");
}
方法三:
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;
}
实现把文章按空格打散:
public static void Main ()
{
string a="While laughter is is very aerobic activity engages every single organ system";
string b=" ";
string []c=TestDoWhile.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位一样的参数不同而已):
static void Main()
{
Double a = 12.345678;
Console.Write(Math.Round(a,2));
}
四舍五入:
static void Main()
{
Double a = 12.345678;//是要四舍五入的数
Console.Write((a*10000+0.5)/10000);
}
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 文件好象无效。
6.把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);
}
}
}
7.交换两个指定位置字符的4种方法
方法一:
static void Main()
{
string s = "123456789";
SwapChar(ref s, 3, 6);
Console.Write(s.ToString());
} static void SwapChar(ref string s, int i1, int i2)
{
char temp = s[i1];
char temp1 = s[i2];
s = s.Remove(i1, 1).Insert(i1, temp1.ToString());
s = s.Remove(i2, 1).Insert(i2, temp.ToString());
}
static void Main()
{
string s = "123456789"; //SwapChar(s, 3, 6);
Console.Write(SwapChar(s, 3, 6).ToString());
} static string SwapChar(string s, int p1, int p2)
{
if ((p1 == p2) || ((p1 < 0) || (p2 < 0))) return s;
if ((p1 >= s.Length) || (p2 >= s.Length)) return s;
char[] vChars = s.ToCharArray();
vChars[p1] = (char)(vChars[p2] | (vChars[p2] = vChars[p1]) & 0);
return new string(vChars);
}
方法三:
static void Main()
{
string s = "123456789";
Console.Write(SwapChar(s, 3, 6).ToString());
} public static string SwapChar(string str, int a, int b)
{
char[] newStr = str.ToCharArray();
newStr[a] = str[b];
newStr[b] = str[a];
return new string(newStr);
}
方法四:
using System;
using System.Collections.Generic;
using System.Text;
using System.Text.RegularExpressions; namespace ConsoleApplication1
{
class Program
{
static void Main()
{
string s = "123456789";
Console.Write(SwapChar(s, 3, 6).ToString());
}
static string SwapChar(string s, int p1, int p2)
{
if (p1 > p2)
{
int p = p1;
p1 = p2;
p2 = p;
}
return Regex.Replace(s, "^(.{" + p1 + "})(.)(.{" + (p2 - p1 - 1) + "})(.)(.*)$", "$1$4$3$2$5");
}
}
}
8. “%10”的妙用
static void Main()
{
Random r = new Random();
Console.WriteLine(r.Next() % 10);//1-9
Console.WriteLine(r.Next() % 10);
Console.WriteLine(r.Next() % 10);
Console.WriteLine(r.Next() % 10);
Console.WriteLine(r.Next() % 10);
Console.WriteLine(r.Next() % 10);
Console.WriteLine(r.Next() % 10);
Console.WriteLine(r.Next() % 10);
Console.WriteLine(r.Next() % 10);
}
9.输出21个AAAAAAAAAAAAAAAAAAAAA的巧妙做法
new构造器的理解 如果要你创建一个由21个"A"字符构成的字符串,你会怎么做?
string str = "AAAAAAAAAAAAAAAAAAAAA"; //老实型
string str = new string('A', 21); //简单聪明
C# 字符串详细使用的更多相关文章
- 关于PHP数组转字符串详细介绍
随着时代的发展,我们的开发技术也随着更新,对于PHP还是比较常用的,于是我研究了一下PHP数组转字符串,在这里拿出来和大家分享一下,希望对大家有用. 经常需要使用PHP处理字符string,PHP内置 ...
- .NET格式化字符串详细说明
DataFormatString属性:{0:Bxx}B为取值类型 C 以货币格式显示数值. D 以十进制格式显示数值. E 以科学记数法(指数)格式显示数值. F 以固定格式显示数值. G 以常规格式 ...
- 程序设计入门-C语言基础知识-翁恺-第七周:指针与字符串-详细笔记(七)
目录 第七周:指针与字符串 7.1 指针初步 7.2 字符类型 7.3 字符串 7.3 课后练习 第七周:指针与字符串 7.1 指针初步 sizeof 是一个运算符,给出某个类型或变量在内存中所占据的 ...
- 基本数据类型-集合(set)_上周内容回顾(字符串_数字_列表_元组_字典_集合)
上周内容回顾 1.字符串 2.数字 除了布尔类型外,int.long.float和complex都可以使用的运算为:加.减.乘.除.整除.幂运算和取余 3.列表和元组 列表的内容可变,可以包含任意对象 ...
- Effective Java 第三版——75. 在详细信息中包含失败捕获信息
Tips 书中的源代码地址:https://github.com/jbloch/effective-java-3e-source-code 注意,书中的有些代码里方法是基于Java 9 API中的,所 ...
- python 基本数据类型之字符串功能
字符串常用功能: # name.upper() #全部大写变小写 # name.lower() #全部小写变大写 # name.split() #分割 # name.find() #找到指定子序列的索 ...
- python 字符串方法及列表,元组,字典(一)
字符串 str 注: 若想要保持单引号和双引号为字符串的一部分 1)单双引号交替使用, 2)使用转义字符\ 3)成对三个引号被存在变量里 二.字符串详细用法 字符串的单个取值例 p_1=”hello” ...
- [翻译] GONMarkupParser
GONMarkupParser https://github.com/nicolasgoutaland/GONMarkupParser NSString *inputText = @"Sim ...
- 精彩的javascript对象和数组混合相加
最近遇到一个让人困解的一个问题:一个简单的js加法运算表达式: +[]; //这里加上一个空数组得到什么???答案:'1'; 为什么答案是1,一开始我也很困惑:后来我读了一篇文章才知道:在javasc ...
随机推荐
- CSS3之动画相关
CSS3动画相关的属性:transform,transition,animation. 变形Transform 语法: transform: rotate | scale | skew | trans ...
- VC与JavaScript交互(一) --- 如何实现
为什么要让VC与JavaScript交互? 1.有时候我们需要让自己的软件打开一个网页,来获取页面上的一些数据.这时,可以用mshtml解析HTML提取出数据,也可以向HTML文档动态写入我们准备好的 ...
- WF4 常用类<第二篇>
一.WorkflowInvoker 常用方法如下: 方法 说明 BeginInvoke() 使用指定的 AsyncCallback 和用户提供的状态以异步方式调用工作流 EndInvoke() 返回使 ...
- C/C++中产生随机数
可以使用srand()函数和rand()函数来产生随机数,其中srand()用来初始化随机数种子,rand()用来产生随机数.因为默认情况下随机数种子为1,而相同的随机数种子产生的随机数是一样的,失去 ...
- Hadoop SecondaryNameNode备份及恢复
1.同步各个服务器时间 yum install ntp ntpdate ntp.fudan.edu.cn hdfs-site.xml配置 如果没有配置这一项,hadoop默认是0.0.0.0:5009 ...
- 开发iOS应用程序需要的工具和编程技术
似乎每个iOS应用开发学习者都是从这篇文章开始写博客的,我也不例外,也从这里写吧,内容雷同,但绝对是原创.因为一直相信,通过自己的理解写出来,是掌握技术一个很好的途径. Xcode苹果最为优秀的集成开 ...
- IE9 以下版本浏览器兼容HTML5的方法,使用百度静态资源的html5shiv包
<!--[if lt IE9]> <script src="http://apps.bdimg.com/libs/html5shiv/3.7/html5shiv.min.j ...
- 巩固一下C语言中的指针
今天无意间看到一篇文章<[C语言] 浅谈指针>,对C语言指针的总结很好! 文章地址:http://blog.csdn.net/wbq1480/article/details/5150612 ...
- php输出函数 var_dump, dump,print,print_r 区别
php输出函数 var_dump, dump,print,print_r 区别 周末有空就来整理下
- php验证是否是md5编码的代码
php验证是否是md5编码的示例. 代码很简单,使用了正则表达式. function is_md5($password) { return preg_match("/^[a-z0-9 ...