完美分割字符串,实现字符串的splict功能
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功能的更多相关文章
- Android 用空格作为分割符切割字符串
项目中有需要用到空格作为分割符切割字符串,进而转为List. String wordStore = edWord.getText().toString(); String[] word = wordS ...
- Sql Server 中将由逗号“,”分割的一个字符串转换为一个表集,并应用到 in 条件中
Sql Server 中将由逗号“,”分割的一个字符串,转换为一个表,并应用与 in 条件 ,,) 这样的语句和常用,但是如果in 后面的 1,2,3是变量怎么办呢,一般会用字符串连接的方式构造sql ...
- js中JSON的解析(将json字符串转化为对象)和序列化(将对象转化为json字符串)(函数的功能一般都挺全的,需要的时候去查看完整函数)
js中JSON的解析(将json字符串转化为对象)和序列化(将对象转化为json字符串)(函数的功能一般都挺全的,需要的时候去查看完整函数) 一.总结 1.JSON解析:JSON.parse(myJS ...
- es6字符串扩展 -- 字符串长度补全功能 padStart(), padEnd()
ES2017 引入了字符串补全长度的功能.如果某个字符串不够指定长度,会在头部或尾部补全.padStart()用于头部补全,padEnd()用于尾部补全. 'x'.padStart(5, 'ab') ...
- java以逗号为分割符拼接字符串的技巧
java以逗号为分割符拼接字符串的技巧 答: 不用那么多if判断,让人思维混乱,直接到最后使用deleteCharAt方法去除最后一个逗号即可. 实现代码如下所示: StringBuffer sb ...
- python字符串、字符串处理函数及字符串相关操作
python字符串.字符串处理函数及字符串相关操作 字符串介绍 python字符串表示 Python除处理数字外还可以处理字符串,字符串用单撇号或双撇号包裹: >>> 'spam e ...
- python split()函数使用拆分字符串 将字符串转化为列表
函数:split()Python中有split()和os.path.split()两个函数,具体作用如下:split():拆分字符串.通过指定分隔符对字符串进行切片,并返回分割后的字符串列表(list ...
- 实现C语言字符串操作的库函数 包括基本的字符串复制 字符串长度 字符串比较等多种函数(C代码)
头文件 "mystring.h" #ifndef _MYSTR_H #define _MYSTR_H #include <stdio.h> #include <s ...
- [转] SQL SERVER拼接字符串(字符串中有变量)
本文转自:http://blog.csdn.net/sikaiyuan2008/article/details/7848926 SQL SERVER拼接字符串(字符串中有变量)对我来说是一个难点,总是 ...
- Net基础篇_学习笔记_第十二天_面向对象继承(字符串_字符串的各种方法)
我们可以讲字符串看做是char类型的一个只读数组.ToCharArray();将字符串转换为char数组new string(char[] chs):能够将char数组转换为字符串 1).Length ...
随机推荐
- 关于html5的几个新标签在IE9之前不支持的解决办法
IE8及之前的浏览器不支持用CSS的方法来使用这些尚未支持的结构元素,为了在Internet Explorer浏览器中也能正常使用这些结构元素,需要使用JavaScript脚本,如下:<scri ...
- 转:设置Loadrunner负载机临时文件目录
最近在跑稳定性测试 3 X 24小时的时候,发现负载机产生的日志还运行记录等等竟然有100多G! C盘空间不足,但是D盘还有700多G空间呢,怎么让临时文件转移到D盘? 此处分两种情况: 一. 修改本 ...
- dfs和bfs的简单总结
首先是dfs,又名深度优先搜索.看名字就知道,它的核心思想就是一直搜索,先在一条路上面一路撸到底,如果到底没有办法前进了,那么判断是否到达终点,如果没有到达,那么就回溯到之前的点再撸. dfs的要点: ...
- hdu_5691_Sitting in Line(状压DP)
题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=5691 题意:中文,不解释 题解:设dp[i][j]表示当前状态为i,以第j个数为末尾的最忧解,然后dp ...
- 高性能web开发:如何加载js,,js的存放位置
外部JS的阻塞下载 所有浏览器在下载JS的时候,会阻止一切其他活动,比如其他资源的下载,内容的呈现等等.至到JS下载.解析.执行完毕后才开始继续并行下载其他资源并呈现内容. 有人会问:为什么JS不能像 ...
- ecb, 找不到button
我问了一下,http://stackoverflow.com/questions/17667554/when-configuring-ecb-i-cant-found-button-save-for- ...
- 苹果充电器USB端的识别电阻的设置
苹果为充电器定义了3种充电电流,分别是0.5A/1A/2.1A.具体是由3种不同的电阻组合来实现的.当苹果的设备ipad,iphone,ipod接入USB口充电器时,会先检测USB D+和D-上的电压 ...
- FragmentActivity与Fragment两者交互方法简介(转)
FragmentActivity与Fragment两者交互方法简介 分类: Fragment 2014-07-07 18:17 88人阅读 评论(0) 收藏 举报 在Android4.0后很多时候我们 ...
- iOS LaunchScreen和LaunchImage的转换启动图
今天开始设置一个新项目的启动图,需要我自己设置,我在UI那拿到以前格式的启动图不知道为何需要那么多图,我记得用LaunchScreen只需一张即可,利用自动布局,今天看到这么多图,发现他用的是Laun ...
- codeforces 492E. Vanya and Field(exgcd求逆元)
题目链接:codeforces 492e vanya and field 留个扩展gcd求逆元的板子. 设i,j为每颗苹果树的位置,因为gcd(n,dx) = 1,gcd(n,dy) = 1,所以当走 ...