A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王运波 中级黑马   /  2014-5-15 18:50  /  1861 人查看  /  11 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

有关split()和substring()方法的解释,用法以及重载的细说

11 个回复

倒序浏览
1.string[] Split(params char[] separator): 将字符串按照指定的分割符分割为字符串数组;
2.string[] Split(char[] separator, StringSplitOptions options)将字符串按照指定的char分割符分割为字符串数组(options取RemoveEmptyEntries的时候移除结果中的空白字符串);
3.string[] Split(string[] separator, StringSplitOptions options)将字符串按照指定的string分割符分割为字符串数组。
4.string Substring(int startIndex), 取从位置startIndex开始一直到最后的子字符串;
5.string Substring(int startIndex,int length), 取从位置startIndex开始长度为length的子字符串,如果子字符串的长度不足length则报错。

回复 使用道具 举报
本帖最后由 袁晓俊 于 2014-5-15 21:05 编辑

c# indexof Split(c) substring 用法   
IndexOf()  
查找字串中指定字符或字串首次出现的位置,返首索引值,如:  str1.IndexOf("字"); //查找“字”在str1中的索引值(位置)  
str1.IndexOf("字串");//查找“字串”的第一个字符在str1中的索引值(位置)  str1.IndexOf("字",start,end);//从str1第start+1个字符起,查找end个字符,查找“字”在字符串STR1中的位置[从第一个字符算起]注意:start+end不能大于str1的长度
indexof参数为string,在字符串中寻找参数字符串第一次出现的位置并返回该位置。如string s="0123dfdfdf";int i=s.indexof("df");这时i==4。  如果需要更强大的字符串解析功能应该用Regex类,使用正则表达式对字符串进行匹配。
IndexOf()  
查找字串中指定字符或字串首次出现的位置,返首索引值,如:  str1.IndexOf("字"); //查找“字”在str1中的索引值(位置)  str1.IndexOf("字串");//查找“字串”的第一个字符在str1中的索引值(位置)  str1.IndexOf("字",start,end);//从str1第start+1个字符起,查找end个字符,查找“字”在字符串STR1中的位置[从第一个字符算起]注意:start+end不能大于str1的长度
indexof参数为string,在字符串中寻找参数字符串第一次出现的位置并返回该位置。如string s="0123dfdfdf";int i=s.indexof("df");这时i==4。  如果需要更强大的字符串解析功能应该用Regex类,使用正则表达式对字符串进行匹配。
indexof() :在字符串中从前向后定位字符和字符串;所有的返回值都是指在字符串的绝对位置,如为空则为- 1
string test="asdfjsdfjgkfasdsfsgfhgjgfjgdddd";
   test.indexof(’d’)       =2            //从前向后 定位 d 第一次出现的位置
   test.indexof(’d’,1)     =2           //从前向后 定位 d 从第三个字符串 第一次出现的位置
     test.indexof(’d’,5,2)   =6      //从前向后 定位 d 从第5 位开始查,查2位,即 从第5位到第7位;
lastindexof() :在字符串中从后向前定位字符和字符串;、 用法和 indexof() 完全相同。
下面介绍   IndexOfAny ||lastindexofany 他们接受字符数组做为变元,其他方法同上,返回数组中任何一个字符最早出现的下标位置 如下
         char[] bbv={’s’,’c’,’b’};
         string abc = "acsdfgdfgchacscdsad";         
         Response.Write(abc.IndexOfAny(bbv))=1          Response.Write(abc.IndexOfAny(bbv, 5))=9          Response.Write(abc.IndexOfAny(bbv, 5, 3))=9 lastindexofany 同上。
==================================================================== substring() 用法
string a="aadsfdjkfgklfdglfd"
a.substring(5)      //截取从第五位以后的所有字符串
a.substring(0,5)     //截取从第0到第5 以后的所有字符串 string myString = "Hello Word!"; //Substring()在C#中有两个重载函数 //分别如下示例
string subString1 = myString.Substring(0); //如果传入参数为一个长整, 且大于等于0, //则以这个长整的位置为起始, //截取之后余下所有作为字串. //如若传入值小于0,
//系统会抛出ArgumentOutOfRange异常 //表明参数范围出界
string subString2 = myString.Substring(0, 5);  
//如果传入了两个长整参数,
//前一个为参数子串在原串的起始位置 //后一个参数为子串的长度 //如不合条件同样出现上述异常
Console.WriteLine(subString1); Console.WriteLine(subString2); Console.ReadLine(); 程序输出的结果:
Hello Word! Hello
==============================================================
第一种方法:
string s=abcdeabcdeabcde; string[] sArray=s.Split(c)  foreach(string i in sArray)
  Console.WriteLine(i.ToString()); 输出下面的结果: ab deab deab de 第二种方法:
我们看到了结果是以一个指定的字符进行的分割。使用另一种构造方法对多个字符进行分割:  string s=abcdeabcdeabcde
string[] sArray1=s.Split(new char[3]{c,d,e})  foreach(string i in sArray1)   Console.WriteLine(i.ToString()); 可以输出下面的结果: ab ab ab
第三种方法:
除了以上的这两种方法以外,第三种方法是使用正则表达式。新建一个控制台项目。然后先添加 using System.Text.RegularExpressions;
System.Text.RegularExpressions
string content=agcsmallmacsmallgggsmallytx;  
string[]resultString=Regex.Split(content,small,RegexOptions.IgnoreCase)  
foreach(string i in resultString)   Console.WriteLine(i.ToString()); 输出下面的结果:
agc mac ggg ytx   
第四种方法:
string str1=我*****是*****一*****个*****教*****师; string[] str2;
str1=str1.Replace(*****,*)  str2=str1.Split(*)  
foreach(string i in str2)
  Console.WriteLine(i.ToString());  
第五种方法:
string str1=我**是*****一*****个*****教*****师; 我希望显示的结果为:我是一个教师。
我如果采用上面的第四种方法来做就会产生下面的错误:我   是一个教师。中间有空格输出,所以输出结果并不是希望的结果,这就又回到了正则表达式了,这时可以采用下面的第五种方法:
string str1=我**是*****一*****个*****教*****师;
string[] str2
= System.Text.RegularExpressions.Regex.Split(str1,@+);  foreach(string i in str2)
  Console.WriteLine(i.ToString());  这里通过+ 巧妙的完成了我们的目标。
回复 使用道具 举报
字符串的分割
  我们经常会遇到字符串的分割的问题,在后面制作播放器的时候,可以用现在学习的方法来分割歌词。
  下面我们来具体看下string[]Split(params char[] separator):将字符串按照指定的分割符分割为字符串数组:

图一、字符串的分割
String[] Split(char[] separator, StringSplitOptions options)将字符串按照指定的char分隔符分割为字符串数组(options去RemoveEmptyEntries的时候移除结果中的空白字符串);

图二、看看跟刚才有什么不一样的地方

图三、干掉空白项的
  如果用户输入的是汉字,我们怎么把它提炼出来呢?
  我们在学习的时候,重点研究string中的方法,因为在string中的方法还是比较全面的,这里详细的介绍里面的基础知识,供初学者参考,目的是为了让大家在后面少走弯路。
  下面我们看字符串函数中的其它常用方法。
字符串替换:  String Replace(string oldValue,string newValue)将字符串中的出现oldValue的地方替换为newValue.例子:名字替换。

图四、字符的替换

图五、字符串的替换
  取子字符串:string Substring(int startIndex),取从位置startIndex开始一直到最后的子字符串;

图六、截取字符串
  Substring();第一个重载 参数是int类型,给一个数字,就会从这个下标开始截取。截取到最后
Substring();第二个重载,两个参数都是int类型,第一个参数是从哪个下标开始截取,第二个参数截取几个字符串;

如果截取的个数超出字符串的长度会报异常

图七、判断字符串中是否含有这个字符串
  Bool StartsWith(string value)判断字符串是否以子串value开始;

图八、判断字符串是不是以川川开始的
Bool EndsWith(string value)判断字符串是否以子串value结束;

图九、从后往前判断
  和上面的那个方法正好相反,判断是不是以某个字符串结尾
Int IndexOf(string value):取子串value第一次出现的位置。

图十、查找字符串里面的e
  一道面试题呦
stringBuilder(简称SB)和string的区别?
答:string在进行运算时(如赋值、拼接等)会产生一个新的实例,而StringBuilder则不会,所以在大量字符串拼接或频繁对某一字符串进行操作时最好使用StringBuilder,不要使用String
如果要操作一个不断增长的字符串,尽量不用string类 改用StringBuilder类,两个类的工作原理不同 string类是一种传统的修改字符串的方法,它确实可以完成把一个字符串添加到另一个字符串上的工作没错,但是在NET框架下,这个操作实在是划不来,因为系统先是把对象,并读取内存中的数据付给该对象,这一来二去的,耗了不少时间。而使用System Text命名空间下面的StringBuilder类就不是这样了,它提供的Append方法,能够在已有对象的原地进行字符串的修改,简单而且直接。当然,一般情况下觉察不到这二者效率的差异,但如果你要对某个字符串进行大量的添加操作,那么StringBuilder类所耗费的时间和String类简直不是一个数量级的。

练习
1.接收用户输入的字符串,将其中的字符以与输入相反的顺序输出。"abc"→"cba"---------之前学过

2.接收用户输入的一句英文,将其中的单词以反序输出。"hello c sharp"→"sharp c hello"-----------同上
如果我是你的领导现在让你们做上面的两个练习,看看你们能从容的通过简单的方法写出上面两个题的代码么?

着重看我下面的方法,题目:从Email中提取出用户名和域名:abc@163.com。----------分割------------

图十一、IndexOf后面经常用到的方法
  让用户输入一句话,找出所有e的位置

图十二、找出字符串里面所有的e
练习:文本文件中存储了多个文章标题、作者,标题和作者之间用若干空格(数量不定)隔开,每行一个,标题有的长有的短,输出到控制台的时候最多标题长度10,如果超过10,则截取长度8的子串并且最后添加“...”,加一个竖线后输出作者的名字。


图十三、读文章内容作判断

图十四、读文章做判断最终完整演示




回复 使用道具 举报
更多内容请参见我的博客(袁晓俊):                       http://blog.163.com/yuanxiaojun_happy/blog/static/17330992920144643050611/

回复 使用道具 举报
好强大  好正式
回复 使用道具 举报
跟了  快10天了   袁晓俊  的  每次 说明 都很正式  

点评

谢谢,,,,,,  发表于 2014-5-18 10:11
回复 使用道具 举报
袁晓俊 发表于 2014-5-15 21:03
字符串的分割  我们经常会遇到字符串的分割的问题,在后面制作播放器的时候,可以用现在学习的方法来分割歌 ...

写的很清晰,很容易理解,膜拜
回复 使用道具 举报
substring 方法
含义:指获取从指定开始位置到结束位置的字符串。
规则:substring(start, end) / substring(end, start); 顺序正反结果一样,取绝对值;

        string A = ‘this is A string’;
        string str = A.substr(8, 9)/A.substr(9, 8);
结果输出:A
split 方法
含义:指获取以某个字符串为标记符将一段字符串截取成几段
规则:split(",",length); str.Split(new char[2] { ‘|’, ‘,’});
例如:
        string A = ‘ABC,abc’;
        string[] arr = A.split(",");
arr[0] = ABC;
回复 使用道具 举报
确实是。回答的都很完整!!跟着都能学到很多东西
回复 使用道具 举报
azve 中级黑马 2014-5-31 12:24:27
11#
好像很牛逼的样子
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马