• 关于获取字符串的某一段值的问题


    关于字符串的获取或一段字符的问题的情况很多的,比如说,将获取的字符串从第n位,取到第m位,在c#下,我们可以使用Substring()来取得

    比如:

    string str = "abcdefg";
    str.Substring(
    0, 2);

    Substring是从0位开始的,上面的结果也就是:从左至右,获取到:“ab”两个字符,而如果想获取最后两个字符咋办呢?

    string str = "abcdefg";
    str.Substring(str.Length
    - 2, 2);

    通过对字符的长度,然后减去所要获取的长度,就OK了。

    如果,字符串内的内容是数字。当我在textBox1中输入的内容为:12345。我们在后面处理的时候,需要按照数字来显示,但是需要从小数点向前取,每次取两位,保证我能取到8位的值,那应该如何做呢?

    首先,我们可以按照上面的办法来获取,可以依次获取到 45、23 当获取到 第一位的"1"时候怎么处理?

    如果是小数,比如:12345.6我们就可能是:56 34 12这样获取,那具体做则么做呢?

    首先按照字符串的思想,就是在前面填充,空格或者这里是数字,就填充0:

    代码
    int n = 8;//所要获取的长度
    string str = "12345";
    if (str.Length < n)
    {
    int strLen = n - str.Length;
    for (int i = 0; i < strLen; i++)
    {
    str
    = "0" + str;
    }
    }

    完成后,在按照上面的办法来获取,字符串,然后再转换成数字。

    这样的思路是不错,但是需要转一个圈。而遇到小数的情况,就比较头疼了,需要转成数字,乘以一个数,然后再转成字符串,获取需要的部分,最后在转成数字。

    代码
    int n = 8;//所要获取的长度
    int m = 1;//小数点后,有效的位数
    string str = "12345";

    str
    = Convert.ToString( Convert.ToInt32(str) * Math.Pow(10, m));
    if (str.Length < n )
    {
    int strLen = n - str.Length;
    for (int i = 0; i < strLen; i++)
    {
    str
    = "0" + str;
    }
    }

    既然是数字,我们就直接转成数字来获取不是很方便~

    OK,那将“12345”转成12345,整型的情况是比较容易的,每次去两位,那就是 模100 

    12345%100 = 45
    (
    12345/100)%100 = 23
    (
    12345/10000) = 1

    这样看,写起来好烦,其实,我们如果把这些换个写法:

    (12345/Math.Pow(100,0))%100 = 45
    (
    12345/Math.Pow(100,1))%100 = 23
    (
    12345/Math.Pow(100,2))%100 = 1

    这样的话,我们就可以换个写法了,

    依然以需要8位来写:

    代码
    int n = 8;//所要获取的长度
    string str = "12345";


    int[] data = new int[n / 2];
    for (int i = 0; i < n / 2; i++)
    {
    data[i]
    = Convert.ToInt32( (Convert.ToInt32(str) / Math.Pow(100, i))) % 100;

    }

    for (int i = 0; i < n / 2; i++)
    {
    MessageBox.Show(data[i].ToString());
    }

    这里也同样遇到需要处理小数的情况,比如说,我小数点前有6位有效,小数点后有1位有效,那应该如何取呢?

    我们同样需要 乘以一个数,然后将小数部分拉倒小数点前。然后再按照前面的办法来操作;

    代码
    int n = 8;//所要获取的长度
    int m = 1;//小数点后,有效的位数
    string str = "12345";

    int strInt = Convert.ToInt32( Convert.ToInt32(str) * Math.Pow(10, m));

    int[] data = new int[n / 2];
    for (int i = 0; i < n / 2; i++)
    {
    data[i]
    = Convert.ToInt32(strInt / Math.Pow(100, i)) % 100;

    }

    for (int i = 0; i < n / 2; i++)
    {
    MessageBox.Show(data[i].ToString());
    }
  • 相关阅读:
    Error 500curl_setopt(): CURLOPT_SSL_VERIFYHOST no longer accepts the value 1, value 2 will be used i
    解决Apache提示没有权限访问的问题
    【服务器】本地运行成功,但服务器上运行却显示错误500
    CentOS 7中PHP配置文件php.ini的放在哪个位置
    用yum快速搭建LAMP平台
    redis 在32位系统安装以及使用
    CentOS7查看和关闭防火墙
    CENTOS7下安装REDIS
    在centos和redhat上安装docker
    Annotation 注解
  • 原文地址:https://www.cnblogs.com/lingfengchencn/p/1769419.html
Copyright © 2020-2023  润新知