关于字符串截取

字符串截取相信大家都不陌生。但是在同一个字符串中我们需要截取不同的数据,比如将text文本中的数据转换成表格的时候

这些数据中可能包含中文等。

这个时候如果你用string.Length()你会发现等长度的字符串中只要中文的数量不同,获取的字符串长度就会不同。

一下是代码:

        /// <summary>
        /// 截取字符串
        /// </summary>
        /// <param name="strline">被截取的字符串</param>
        /// <param name="dt">填充的表</param>
        /// <param name="weight">截取的長度</param>
        private void getDataToDataTable(string strline,DataTable dt,int[] weight)
        {

            DataRow dr=dt.NewRow();
            int sum=0;
            int count = 0;
            ArrayList num = new ArrayList();
            char[] temp = strline.ToCharArray();
            for (int i = 0; i < temp.Length; i++)
            {
                if (((int)temp[i])>255) //大于255的都是汉字或者特殊字符
                {
                    num.Add(i);
                }
            }
            for (int i = 0; i < dt.Columns.Count; i++)
	  {
          count = 0;
          for (int y = 0; y < num.Count; y++)
          {
            if (Convert.ToInt32(num[y])>=sum&&Convert.ToInt32(num[y])<=sum+weight[i])
                    {
                        count++;
                    }
          }
          dr[i]=strline.Substring(sum,weight[i]-count);
          sum+=weight[i]-count;
	  }
        }

这样就排除了中文字符占位的问题。

在计算整体长度时,中文字符是占了两个字符的位置,但是在获取字符串长度时(string.length)中文字符只计算一个字符长度,这样就产生了位置偏差。

在截取的过程中,我们先找到所截取下来的字符串中所包含的中文字符。这样就知道减少截取的长度。

时间: 2024-08-14 10:08:22

关于字符串截取的相关文章

istringstream字符串流,实现类似字符串截取的功能,字符串流中的put,str()将流转换成为字符串string

 1. istringstream字符串流 #include <iostream> #include <sstream> #include <string> using namespace std; struct MyStruct { string str1, str2, str3; double db; int num; char ch; }; void main() { string  mystring("china  google microsoft

Linux下实现字符串截取方法总结

Linux下实现字符串截取,大体上可以分为两种,使用命令实现截取,使用工具实现截取.具体截取方式如下: a.#截取,可以实现删除左边字符,保留右边字符 从左边第一个</>开始,删除</>及之前的所有字符 str=http://www.baidu.com/index.html echo ${str#*/}        # right first / 输出:      /www.baidu.com/index.html b.##截取,可以实现删除左边字符,保留右边字符 从最右边的&l

shell脚本中8种字符串截取方法_转自脚本之家

转自:http://www.jb51.net/article/56563.htm Linux 的字符串截取很有用.有八种方法. 假设有变量 var=http://www.aaa.com/123.htm. 1. # 号截取,删除左边字符,保留右边字符. echo ${var#*//} 其中 var 是变量名,# 号是运算符,*// 表示从左边开始删除第一个 // 号及左边的所有字符即删除 http://结果是 :www.aaa.com/123.htm 2. ## 号截取,删除左边字符,保留右边字符

MySQL字符串函数substring:字符串截取

MySQL 字符串截取函数:left(), right(), substring(), substring_index().还有 mid(), substr().其中,mid(), substr() 等价于 substring() 函数,substring() 的功能非常强大和灵活. 1. 字符串截取:left(str, length) mysql> select left('example.com', 3);+-------------------------+| left('example.

Shell脚本8种字符串截取方法总结

Linux 的字符串截取很有用.有八种方法. 假设有变量 var=http://www.aaa.com/123.htm. 1. # 号截取,删除左边字符,保留右边字符. echo ${var#*//} 其中 var 是变量名,# 号是运算符,*// 表示从左边开始删除第一个 // 号及左边的所有字符即删除 http://结果是 :www.aaa.com/123.htm 2. ## 号截取,删除左边字符,保留右边字符. echo ${var##*/} ##*/ 表示从左边开始删除最后(最右边)一个

php中文字符串截取方法实例总结

本文实例总结了php中文字符串截取方法,非常实用的技巧.具体方法分析如下: 1.使用mbstring扩展库的mb_substr截取就不会出现乱码了. 2.自己书写截取函数,但效率不如用mbstring扩展库来得高. 3.如果仅是为了输出截取的串,可用如下方式实现:substr($str, 0, 30).chr(0). substr()函数可以分割文字,但要分割的文字如果包括中文字符往往会遇到问题,这时可以用mb_substr()/mb_strcut这个函 数,mb_substr()/mb_str

个人对php,js,css字符串截取的办法汇总

下面的是个人对php,js,css字符串截取的办法汇总,对大神来说可能没什么含量,求少喷哦,当然可以学习教程增强自己的编程能力. 首先是PHP版本的. 其实只用mb_strimwidth一个函数就可以了,该函数的说明如下: mb_strimwidth -  获取按指定宽度截断的字符串 string mb_strimwidth ( string $str , int $start , int $width [,  string $trimmarker = "" [, string $en

Swift字符串截取方法的改进

字符串截取方法是字符串处理中常用的基本方法.熟悉iOS的朋友都知道在基础类的NSString中有substringToIndex:,substringFromIndex:以及substringWithRange:这三种基本的截取方法. 问题描述: 那么,Swift语言中的String类是否有同样的截取功能呢? 反复查看String类的头文件,并没有找到相同或相似的函数接口. 直接在swift文件里也不能对一个String类的变量调用上面的方法. 然而通过引入基础框架,即 import Found

MySQL 字符串截取函数;

*left(), right(), substring(), substring_index(),mid(), substr(),mid(), substr() 等价于 substring() 函数 1. 字符串截取:left(str, length) mysql> select left('example.com', 3); +-------------------------+ | left('example.com', 3) | +-------------------------+ |

PHP字符串截取,计算字符串长度

1 /** 2 * 字符串截取,支持中文和其他编码 3 * @param [string] $str [字符串] 4 * @param integer $start [起始位置] 5 * @param integer $length [截取长度] 6 * @param string $charset [字符串编码] 7 * @param boolean $suffix [是否有省略号] 8 * @return [type] [description] 9 */ 10 function msubs