仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 607|回复: 8
打印 上一主题 下一主题

[学习教程] ASP.NET网站制作之.NET字符串的特性,正则表达式在个中如...

[复制链接]
逍遥一派 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:46:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
呵呵,那你就关注微软的招聘信息以及别人的招聘经验啊,还有也不一定去做技术的,你如果真的想去就多了解了解。(其实我的意思是说想到微软做技术是很不容易的。正则|字符串<P>  不论创立甚么范例的使用程序,你都必要利用字符串。不管数据怎样存储,终端用户总要与可读的文本打交道。因而,懂得怎样利用字符串是任何.NET开辟者创立丰厚的使用程序所必要进修的需要常识。除向你展现在.NET框架中字符串的利用外,本文还将向你先容正轨表达式的常识。

  除向你展现怎样利用.NET框架中的字符串外,本文还将向你先容正轨表达式。正轨表达式是格局代码,不但同意你考证一个特定字符串婚配一个给定的格局,并且你还可使用正轨表达式来从任何别的大概被以为是自在格局的文本中提取成心义的信息,比方从用户输出中提取第一个名字,或从一个数字输出中提代替码,或从一个URL中提取服务器名。

  1、利用字符串

  利用字符串是创立高质量使用程序的一个需要的技能。即便你在处置数字或图象数据,终端用户也必要高低文反应。本文将向你先容.NET字符串,怎样格局它们,操纵它们和对照它们,及别的有效的操纵。

  (一).NET字符串简介

  在.NET框架和通用言语运转时候(CLR)之前,开辟者老是消费大批工夫处置字符串。一个字符串例程可重用库几近是每个C和C++程序员的工具箱中的一部分。编写在分歧程序言语之间互换字符串数据的代码也是相称坚苦的。比方,Pascal把字符串存储为一个内存字符数组,个中,该数组的第一个元素唆使字符串的长度;而C把字符串存储为一个具有可变长度的字符内存数组,字符串的末了加上一个ASCIInull字符(在C中以""暗示)。

  在.NET框架中,字符串以常量体例存储。这意味着,当你用C#(或任何别的.NET言语)创立一个字符串时,该字符串以一种流动巨细存储在内存以便CLR运转更快些。了局是,当你完成比方毗连字符串或修正一个字符串中的单个字符时,CLR实践上是创立你的字符串的多个正本。

  C#中的字符串与别的值范例比方整数或浮点数声明体例不异,见上面的例子:

stringx="HelloWorld";
stringy;
stringz=x;
  (二)格局化字符串

  当利用字符串时最多见的一项义务是格局化字符串。当向用户显现信息时,你常常显现如日期,工夫,数字值,十进制值,泉币值,乃至象十六进制数字如许的内容。C#字符串都可以显现这些范例的信息,乃至更多。别的一个强无力的特性是,当你利用该尺度格局化工具时,该格局化的输入具有区域感知特性。比方,假如你以短格局显现一个英格兰用户确当前日期,那末关于一个美国用户来讲,以后日期的短格局将以分歧情势显现。

  为了创立一个格局化的字符串,你仅必要挪用string类的Format办法,而且传送给它一个格局字符串,以下列代码所显现的:

stringformatted=string.Format("Thevalueis{0}",value);
  在此,{0}占位符唆使一个值应当被拔出的地位。除指定一个值应当被拔出的地位外,你还能够指定该值的格局。

  别的数据范例还撑持经过定制格局润色符转换成字符串,比方,DateTime数据范例,经由过程利用以下体例,它可以发生一种定制格局的输入:

DateTime.ToString("formatspecifiers");
  表格1枚举了用于格局化日期,工夫,数字值等数据的一些最经常使用的格局字符串。

  表格1.定制DateTime格局润色符

润色符形貌d显现某月中的这一天。dd显现某月中的这一天,个中,小于10的值之前加上一个0。ddd显现一个礼拜中某一天的三字母缩写名。dddd(+)显现给定的DateTime值中礼拜中的一天的完全名。f(+)显现秒值的最主要的x位数。在f中格局润色符位数越多,该数字越主要。这是个总秒数,而不是从上个分钟以来经由的秒数。F(+)与f(+)不异,除不显现开端的零外。g显现一个给定的DateTime中的时期,比方,"A.D"。h显现小时,局限为:1~12。hh显现小时,局限为:1~12,个中,小于10的值之前加上一个0。H显现小时局限为:0~23。HH显现小时局限为:0~23,个中,小于10的值之前加上一个0。m显现分钟,局限为0~59。mm显现分钟,局限为0~59,个中,小于10的值之前加上一个0。M显现月份,局限为1~12。MM显现月份,局限为1~12,个中,小于10的值之前加上一个0。MMM显现月份的三字符缩略名。MMMM显现月份的完全名字。s显现秒数局限为:0~59。ss(+)显现秒数局限为:0~59,个中,小于10的值之前加上一个0。t显现给定的工夫中AM/PM唆使器中的第一个字符。tt(+)显现给定的工夫中完全的AM/PM唆使器。y/yy/yyyy显现给定的工夫中的年份。z/zz/zzz(+)显现给定的工夫中的时区偏移量。
  让我们察看以下代码,它展现利用字符串格局润色符创立定制格局的日期和工夫字符串:

DateTimedt=DateTime.Now;
Console.WriteLine(string.Format("Defaultformat:{0}",dt.ToString()));
Console.WriteLine(dt.ToString("ddddddMMMM,yyyyg"));
Console.WriteLine(string.Format("CustomFormat1:{0:MM/dd/yyhh:mm:sstt}",dt));
Console.WriteLine(string.Format("CustomFormat2:{0:hh:mm:ssttGMTzz}",dt));
  上面是后面代码的输入:

Defaultformat:9/24/200512:59:49PM
Saturday24September,2005A.D.
CustomFormat1:09/24/0512:59:49PM
CustomFormat2:12:59:49PMGMT-06
  你还能够供应针对数字值的定制格局润色符。表格2形貌了合用于数字值的定制格局润色符。

  表格2.数字定制格局润色符

润色符形貌0零占位符。#数字占位符。假如给定的值中在#润色符唆使的地位有一个数字,那末该数字将以格局化输入显现。.十进制点。,千分位分开符。%百分比润色符。被格局化的值在包含到格局化的输入前将乘以100。E0/E+0/e/e+0/e-0/E迷信标记。"XX"或"XX"代表格局的字符串。这些被包括在格局化的输入中,而不翻译其绝对地位。;用于前提格局化正数,零和正值的节分开符。
  假如界说多个格局节,那末你能够更准确地把持数字的格局化:

  ・两个节-假如你有两个格局化节,则第一节使用于一切负数(包含0)值。第二节使用于正数值,当你想把正数值包含在括号中(就象中很多财政软件包中一样),这是非常便利的。

  ・三个节-假如你有三个格局化节,则第一个节使用于一切负数(不包含0)值。第二节使用于正数值,第三节使用于零。

  以下代码显现怎样利用定制数字格局润色符。

doubledVal=59.99;
doubledNeg=-569.99;
doublezeroVal=0.0;
doublepct=0.23;
stringformatString="{0:$#,###0.00;($#,###0.00);nuttin}";
Console.WriteLine(string.Format(formatString,dVal));
Console.WriteLine(string.Format(formatString,dNeg));
Console.WriteLine(string.Format(formatString,zeroVal));
Console.WriteLine(pct.ToString("00%"));
  后面的代码将发生以下所示的输入了局:

$59.99
($569.99)
nuttin
23%
<P>  (三)操纵和对照字符串

  除显现包括各类格局化数据的字符串外,别的一般与字符串有关的义务就是字符串操纵和对照。要记着的一个主要的事变是,字符串实践上是.NET框架基类库中的一个类。由于它是一个类,以是实践上,你能够挪用一个字符串的办法,就象你能够挪用任何别的类上的办法一样。

  你能够在字符串常数或字符串变量挪用这些办法,见以下代码:

intx=string.Length();
inty="HelloWorld".Length();
  表格3冗长枚举了一些你可使用于字符串的最经常使用的办法以便取得该字符串的信息或操纵它。

  表格3.经常使用的字符串实例办法

办法形貌CompareTo把这个字符串实例与别的字符串实例对照。Contains前往一布尔值,唆使是不是以后字符串实例包括给定的子串。CopyTo从字符串实例中把一个子串复制到一个字符数组的特定地位。EndsWith前往一布尔值,唆使是不是字符串以一个给定的子串停止。Equals唆使是不是该字符串即是另外一个字符串。你还可使用==操纵符来取代。IndexOf前往一个子串在字符串实例中的索引。IndexOfAny前往一个字符串实例中在子串内的任何字符的第一次索引的呈现。PadLeft利用特定命目标空格或别的Unicode字符来添补字符串,出格合用于字符串右对齐。PadRight把一组特定的空格字符或别的Unicode字符增加到字符串的最初,创立一个字符串右对齐效果。Remove从字符串中删除给定命目标字符。Replace利用特定的取代内容来取代一个给定的字符或字符串在字符串实例中的一切呈现。Split利用特定的字符作为支解点,把以后字符串分化成一个字符串数组。StartsWith前往一个布尔值,唆使是不是该字符串实例以一个特定的字符串入手下手。SubString给定肇端点和长度的情形下,前往字符串的特定部分。ToCharArray把字符串转换成一个字符数组。ToLower把字符串全体转换成小写字符。ToUpper把字符串全体转换成年夜写字符。Trim从一个字符串的入手下手和停止地位,删除一组给定字符的一切呈现。TrimStart完成Trim功效,但仅从字符串的入手下手地位。TrimEnd完成Trim功效,但仅从字符串的停止地位。
  以下代码展现了你可使用下面的响应函数来完成字符串查询和操纵等:

stringsourceString="MaryHadaLittleLamb";
stringsourceString2="MaryHadaLittleLamb";
Console.WriteLine(sourceString.ToLower());
Console.WriteLine(string.Format("Thestring{0}is{1}charslong",
sourceString,sourceString.Length));
Console.WriteLine(string.Format("Fourthwordinsentenceis:{0}",
sourceString.Split()[3]));
Console.WriteLine(sourceString2.Trim());
Console.WriteLine("Twostringsequal?"+(sourceString==sourceString2.Trim()));
  后面的代码输入以下所示了局:

maryhadalittlelamb
ThestringMaryHad一个LittleLambis22charslong.
Fourthwordinsentenceis:Little
MaryHadaLittleLamb
Twostringsequal?True
  (四)StringBuilder进门

  如后面所说起,字符串是常量。这意味着,当你把两个字符串联接成一个新的字符串时,有一段工夫CLR在内存中有三个字符串。因而,比方,当你毗连完成以下代码所示毗连时:

stringa="Hello";
stringb="World";
stringc=一个+""+c;
  实践上,在内存共有四个字符串,包含空格。为了和缓这个字符串联接功能成绩而且供应给你一个工具使毗连更简单些,.NET框架中供应了一个类StringBuilder。

  经由过程利用StringBuilder静态地创立可变长度的字符串,你克制了CLR字符串中常量字符串这一现实;并且,如许以来,该代码变得更具可读性。以下代码展现了StringBuilder的利用:

StringBuildersb=newStringBuilder();
sb.Append("Greetings!
");
formatString="{0:$#,###0.00;($#,###0.00);Zero}";
dVal=129.99;
sb.AppendFormat(formatString,dVal);
sb.Append("
Thisisabigconcatenatedstring.");
Console.WriteLine(sb.ToString());
  后面的代码输入以下所示了局:

Greetings!
$129.99
Thisisabigconcatenatedstring.
  注重,后面代码中的"
"把一个换行符字符拔出到字符串中。
<P>  2、利用正轨表达式

  正轨表达式同意疾速无效地处置文本。被处置的文本小到一个电子邮件地点,年夜到一个多行的输出框内容。正轨表达式的利用不但同意你利用一个界说形式来校验文本,并且还同意你从婚配一个给定形式的文本中提取数据。

  你能够把一个正轨表达式看成是一种出格强无力的通配符。当我们看到象"SAMS*"如许的表达式时,我们城市熟习通配符,任何故单词SAMS开首的内容都是一个婚配的表达式。正轨表达式能为你供应远远凌驾通配符的强无力的把持功效。

  本节先向你冗长地先容一下.NET框架中供应的撑持利用正轨表达式的类。有关正轨表达式的更多信息,你能够参考《正轨表达式疾速参考手册》或《精晓正轨表达式》的第二版。这些书将供应给你必要的信息以便创立你本人的正轨表达式,并且还供应了经常使用正轨表达式的一组列表。至于正轨表达式自己已超越本文的会商局限。

  (一)校验输出

  正轨表达式的一种最经常使用的场合是用于利用一些事后界说的格局(比方,强迫创建的划定规矩用于确保口令中包括特定的使其很难被拆断的字符)校验用户输出。这些划定规矩被典范地界说为正轨表达式。正轨表达式也经常使用于校验复杂的输出,比方电子邮件地点和德律风号码。

  .NET框架供应的操纵正轨表达式的一个关头类是RegEx类。这个类供应一个静态的办法IsMatch,它前往一个布尔值唆使是不是指定的输出字符串婚配一个给定的正轨表达式。

  鄙人列代码中,利用一个一般正轨表达式来测试电子邮件地点的无效性:

stringemailPattern=@"^([w-.]+)@(([[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.)|[ccc]
(([w-]+.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(]?)$";
Console.Write("Enterane-mailaddress:");
stringemailInput=Console.ReadLine();
boolmatch=Regex.IsMatch(emailInput,emailPattern);
if(match)
 Console.WriteLine("E-mailaddressisvalid.");
else
 Console.WriteLine("Suppliedinputisnotavalide-mailaddress.");
  假如你弄不分明这个正轨表达式,别忧虑。电子邮件形式的基础头脑是,它必要一些数字字母字符,前面随着一个@标记,然后是一些字符组合,再前面随着一个".",再今后最少随着两个字符。你能够以分歧的输出实验后面的代码来看一下你失掉甚么了局。即便你不睬解该正轨表达式自己,只需晓得它们的存在,那末你就能够把它利用于你的使用程序中来校验输出。

  (二)从输出中提取数据

  正轨表达式的别的罕见的用法是,依据表达式剖析文本和利用之来从用户输出中提取数据(称作组婚配)。

  正轨表达式中包含一个特性叫组。一个组同意你把一个定名标识放到该正轨表达式的一个特定节中。当你挪用Match()来针对形式对照输出数据时,其了局实践上把婚配分红一些组,同意你提取婚配每个组的输出的部分。

  比方,在后面的例子中,我们创立了一个username,它同意我们提取在一个电子邮件地点中位于@标记前的一切数据。然后,当实行一个婚配时,我们可以利用正轨表达式的定名组从输出中提取该username。

  以下代码显现如何从一个用户在把持台输出的URL中提取协定名字和端标语。正轨表达式的巨大在于,它们利用本人的言语;因而,它们不用依附于C、C++、C#、VB.NET或任何别的言语。鄙人列代码中的正轨表达式来自于一个MSDN例子:

stringurlPattern=@"^(?<proto>w+)://[^/]+?(?<port>:d+)?/";
Console.WriteLine();
Console.Write("EnteraURLfordataparsing:");
stringurl=Console.ReadLine();
RegexurlExpression=newRegex(urlPattern,RegexOptions.Compiled);
MatchurlMatch=urlExpression.Match(url);
Console.WriteLine("TheProtocolyouenteredwas"+urlMatch.Groups["proto"].Value);
Console.WriteLine("ThePortNumberyouenteredwas"+urlMatch.Groups["port"].Value);
  当你利用不带有一个端标语的URL运转后面的代码时,你会注重到,你没有失掉任何组值。这是由于,该输出基本不婚配正轨表达式。当不存在婚配时,你明显没法从给定的组中提取成心义的数据。当你利用婚配该正轨表达式的端标语的URL运转后面的代码时,你将失掉以下列文本所示的输入了局:

EnteraURLfordataparsing:http://server.com:2100/home.aspx
TheProtocolyouenteredwashttp
ThePortNumberyouenteredwas:2100
  3、总结

  在本文中,你已看到如今你有了本人的字符串例程库。借助于C#和.NET框架,字符串成为该基类库的一个本机构成部分,而且供应给你大批的工具办法用于完成字符串的对照,操纵,格局化等操纵。你还看到,StringBuilder类向你供应了一组易于利用的工具办法以便静态地构建字符串而不会带来当地字符串联接的功能丧失。

  最初,本文向你冗长先容了正轨表达式的能力和Regex类是怎样把这些功效整合到一同的。经由过程浏览本文和实验响应的示例代码后,你应当熟习一些字符串和正轨表达式操纵以使你的使用程序更加无力。前天傍晚我发表了《Java的跨平台就是一句谎言。》,原本就是周末闲来无事,发表一篇略带争议性的博文让大家都来吵吵架,发表自己的看法,根本就没想着谁把谁打倒,一个行业或者是技术阵营是无法用短期口水仗打到对手的。
金色的骷髅 该用户已被删除
沙发
发表于 2015-1-19 23:24:11 | 只看该作者
目前在微软的.net战略中新推出的ASP.net借鉴了Java技术的优点,使用CSharp(C#)语言作为ASP.net的推荐语言,同时改进了以前ASP的安全性差等缺点。但是,使用ASP/ASP.net仍有一定的局限性,因为从某种角度来说它们只能在微软的WindowsNT/2000/XP+IIS的服务器平台上良好运行(虽然像ChilliSoft提供了在UNIX/Linux上运行ASP的解决方案.
灵魂腐蚀 该用户已被删除
板凳
发表于 2015-1-25 17:07:48 | 只看该作者
主流网站开发语言之JSP:JSP和Servlet要放在一起讲,是因为它们都是Sun公司的J2EE(Java2platformEnterpriseEdition)应用体系中的一部分。
小女巫 该用户已被删除
地板
发表于 2015-2-3 11:57:13 | 只看该作者
现在主流的网站开发语言无外乎asp、php、asp.net、jsp等。
海妖 该用户已被删除
5#
发表于 2015-2-8 20:40:46 | 只看该作者
是目前ASP在UNIX/Linux上的应用可以说几乎为0)。所以平台的局限性和ASP自身的安全性限制了ASP的广泛应用。
不帅 该用户已被删除
6#
发表于 2015-2-26 07:56:04 | 只看该作者
业务逻辑代码都不必做任何改动;继承性和多态性使得代码的可重用性大大提高,你可以通过继承已有的对象最大限度保护你以前的投资。并且C#和C++、Java一样提供了完善的调试/纠错体系。
飘飘悠悠 该用户已被删除
7#
发表于 2015-3-8 12:52:34 | 只看该作者
主流网站开发语言之CGI:CGI就是公共网关接口(CommonGatewayInterface)的缩写。它是最早被用来建立动态网站的后台技术。这种技术可以使用各种语言来编写后台程序,例如C,C++,Java,Pascal等。
分手快乐 该用户已被删除
8#
发表于 2015-3-15 23:07:42 | 只看该作者
那么,ASP.Net有哪些改进呢?
透明 该用户已被删除
9#
发表于 2015-3-22 17:48:23 | 只看该作者
最强的技术支持WebService,而且有.NET的所有library做后盾。而且ASP.NET在.NET3.5中还有微软专门为AJAX开发的功能--ASP.NETAJAX。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2025-1-10 05:53

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表