class Str:Client_C

{

  string val;

  string[] str = new string[100];

  public void StrT1()

  {

    //1.正常情况

    //2.两个分隔符相邻

    //3.以分隔符开始或者结束。

    //如果只有一次,做个细小的改变,让他跟随又规律的其他

    int nIdx = -1;

    int xIdn = val.IndexOf(',', 0);  //必须从0开始,而不是现在的nIdx=-1

int maxIdn = val.Length-1;

    int i = 0;

    while (xIdn <= maxIdn && xIdn!=-1)

    {

nIdx++;//将到达正式字符串,从此开始截取。,,hh                 //1.以分隔符开始,或者相邻,处理特殊情况                                if (nIdx == xIdn)

      {

        str[i++] = "";                     //在小于最大索引的情况下递增,等于最大都不往下找了

        if (xIdn < maxIdn)

        {

          //nIdx不变,寻找下一个Idx

          xIdn = val.IndexOf(',', nIdx + 1);

          continue;

        }

        else //如果nIdx == xIdn,那么nIdx不变,xIdx该成-1,代表结束

        {

          xIdn = -1;

          break;

        }

      }

      str[i++] = val.Substring(nIdx, xIdn - nIdx);

      //想想为什么是xIdx-nIdx,想想什么是下标,现在的nIdx和xIdx各代表什么,在什么位置。

      nIdx = xIdn;                 //从后一个分隔符的下一个标记开始查

      xIdn = val.IndexOf(',', nIdx+1);

    }

    //最后一次的时候,xIdn失效-1,同时也处理了以分隔符结束的情况,截取0个字符串的时候,结果为空,恰好

    //没经过while循环内的nIdx++,标记还停留在分隔符位置,所以要从nIdx+1开始

    str[i] = val.Substring(nIdx+1, maxIdn - nIdx);//nIdx还未加1,计算长度的时候,直接相减恰好

    Print();

}

public void Print()

{

  StringBuilder sb = new StringBuilder();

  foreach (string item in str)

  {

    sb.Append(item + "  ");

  }

  Console.WriteLine(sb.ToString());

}

public void Client()

   {

StrT1();

  }

}

总结:编程的关键不在于处理好常规情况,而是处理好特殊情况,然后将两种情况结合起来。

完美分割字符串,实现字符串的splict功能的更多相关文章

  1. Android 用空格作为分割符切割字符串

    项目中有需要用到空格作为分割符切割字符串,进而转为List. String wordStore = edWord.getText().toString(); String[] word = wordS ...

  2. Sql Server 中将由逗号“,”分割的一个字符串转换为一个表集,并应用到 in 条件中

    Sql Server 中将由逗号“,”分割的一个字符串,转换为一个表,并应用与 in 条件 ,,) 这样的语句和常用,但是如果in 后面的 1,2,3是变量怎么办呢,一般会用字符串连接的方式构造sql ...

  3. js中JSON的解析(将json字符串转化为对象)和序列化(将对象转化为json字符串)(函数的功能一般都挺全的,需要的时候去查看完整函数)

    js中JSON的解析(将json字符串转化为对象)和序列化(将对象转化为json字符串)(函数的功能一般都挺全的,需要的时候去查看完整函数) 一.总结 1.JSON解析:JSON.parse(myJS ...

  4. es6字符串扩展 -- 字符串长度补全功能 padStart(), padEnd()

    ES2017 引入了字符串补全长度的功能.如果某个字符串不够指定长度,会在头部或尾部补全.padStart()用于头部补全,padEnd()用于尾部补全. 'x'.padStart(5, 'ab') ...

  5. java以逗号为分割符拼接字符串的技巧

    java以逗号为分割符拼接字符串的技巧   答: 不用那么多if判断,让人思维混乱,直接到最后使用deleteCharAt方法去除最后一个逗号即可. 实现代码如下所示: StringBuffer sb ...

  6. python字符串、字符串处理函数及字符串相关操作

    python字符串.字符串处理函数及字符串相关操作 字符串介绍 python字符串表示 Python除处理数字外还可以处理字符串,字符串用单撇号或双撇号包裹: >>> 'spam e ...

  7. python split()函数使用拆分字符串 将字符串转化为列表

    函数:split()Python中有split()和os.path.split()两个函数,具体作用如下:split():拆分字符串.通过指定分隔符对字符串进行切片,并返回分割后的字符串列表(list ...

  8. 实现C语言字符串操作的库函数 包括基本的字符串复制 字符串长度 字符串比较等多种函数(C代码)

    头文件 "mystring.h" #ifndef _MYSTR_H #define _MYSTR_H #include <stdio.h> #include <s ...

  9. [转] SQL SERVER拼接字符串(字符串中有变量)

    本文转自:http://blog.csdn.net/sikaiyuan2008/article/details/7848926 SQL SERVER拼接字符串(字符串中有变量)对我来说是一个难点,总是 ...

  10. Net基础篇_学习笔记_第十二天_面向对象继承(字符串_字符串的各种方法)

    我们可以讲字符串看做是char类型的一个只读数组.ToCharArray();将字符串转换为char数组new string(char[] chs):能够将char数组转换为字符串 1).Length ...

随机推荐

  1. 关于html5的几个新标签在IE9之前不支持的解决办法

    IE8及之前的浏览器不支持用CSS的方法来使用这些尚未支持的结构元素,为了在Internet Explorer浏览器中也能正常使用这些结构元素,需要使用JavaScript脚本,如下:<scri ...

  2. 转:设置Loadrunner负载机临时文件目录

    最近在跑稳定性测试 3 X 24小时的时候,发现负载机产生的日志还运行记录等等竟然有100多G! C盘空间不足,但是D盘还有700多G空间呢,怎么让临时文件转移到D盘? 此处分两种情况: 一. 修改本 ...

  3. dfs和bfs的简单总结

    首先是dfs,又名深度优先搜索.看名字就知道,它的核心思想就是一直搜索,先在一条路上面一路撸到底,如果到底没有办法前进了,那么判断是否到达终点,如果没有到达,那么就回溯到之前的点再撸. dfs的要点: ...

  4. hdu_5691_Sitting in Line(状压DP)

    题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=5691 题意:中文,不解释 题解:设dp[i][j]表示当前状态为i,以第j个数为末尾的最忧解,然后dp ...

  5. 高性能web开发:如何加载js,,js的存放位置

    外部JS的阻塞下载 所有浏览器在下载JS的时候,会阻止一切其他活动,比如其他资源的下载,内容的呈现等等.至到JS下载.解析.执行完毕后才开始继续并行下载其他资源并呈现内容. 有人会问:为什么JS不能像 ...

  6. ecb, 找不到button

    我问了一下,http://stackoverflow.com/questions/17667554/when-configuring-ecb-i-cant-found-button-save-for- ...

  7. 苹果充电器USB端的识别电阻的设置

    苹果为充电器定义了3种充电电流,分别是0.5A/1A/2.1A.具体是由3种不同的电阻组合来实现的.当苹果的设备ipad,iphone,ipod接入USB口充电器时,会先检测USB D+和D-上的电压 ...

  8. FragmentActivity与Fragment两者交互方法简介(转)

    FragmentActivity与Fragment两者交互方法简介 分类: Fragment 2014-07-07 18:17 88人阅读 评论(0) 收藏 举报 在Android4.0后很多时候我们 ...

  9. iOS LaunchScreen和LaunchImage的转换启动图

    今天开始设置一个新项目的启动图,需要我自己设置,我在UI那拿到以前格式的启动图不知道为何需要那么多图,我记得用LaunchScreen只需一张即可,利用自动布局,今天看到这么多图,发现他用的是Laun ...

  10. codeforces 492E. Vanya and Field(exgcd求逆元)

    题目链接:codeforces 492e vanya and field 留个扩展gcd求逆元的板子. 设i,j为每颗苹果树的位置,因为gcd(n,dx) = 1,gcd(n,dy) = 1,所以当走 ...