zoukankan      html  css  js  c++  java
  • c#中英文混合字符串截取指定长度

    //字符是否为汉字
            public bool IsChinese(char c)
            {
                return (int)c >= 0x4E00 && (int)c <= 0x9FA5;
            }
            //获得字节长度
            private int getLengthb(string str)
            {
                return System.Text.Encoding.Default.GetByteCount(str);
            }

            //c#的中英文混合字符串截取指定长度,startidx从0开始 by gisoracle@126.com
            public string getStrLenB(string str, int startidx, int len)
            {
                int Lengthb = getLengthb(str);
                if (startidx + 1 > Lengthb)
                {
                    return "";
                }
                int j = 0;
                int l = 0;
                int strw = 0;//字符的宽度
                bool b = false;
                string rstr = "";
                for (int i = 0; i < str.Length; i++)
                {
                    char c = str[i];
                    if (j >= startidx)
                    {
                        rstr = rstr + c;
                        b = true;
                    }
                    if (IsChinese(c))
                    {
                        strw = 2;
                    }
                    else
                    {
                        strw = 1;
                    }
                    j = j + strw;
                    if (b)
                    {
                        l = l + strw;
                        if ((l+1)>= len) break;

                    }


                }
                return rstr;

            }

            private void button4_Click(object sender, EventArgs e) //测试by yl gisoracle@126.com
            {
                MessageBox.Show(getStrLenB("gisoracle欢迎你gisoracle", 0, 10));//gisoracle
                MessageBox.Show(getStrLenB("gisoracle欢迎你gisoracle", 1, 10));//isoracle欢
                MessageBox.Show(getStrLenB("gisoracle欢迎你gisoracle", 2, 10));//isoracle欢
            }

  • 相关阅读:
    欧拉公式
    isap的一些想法
    错误合集
    Hello World
    PAT (Advanced Level) Practice 1068 Find More Coins
    PAT (Advanced Level) 1087 All Roads Lead to Rome
    PAT (Advanced Level) 1075 PAT Judge
    PAT (Advanced Level) 1067 Sort with Swap(0, i)
    PAT (Advanced Level) 1017 Queueing at Bank
    PAT (Advanced Level) 1025 PAT Ranking
  • 原文地址:https://www.cnblogs.com/gisoracle/p/1576879.html
Copyright © 2011-2022 走看看