关于字符串的获取或一段字符的问题的情况很多的,比如说,将获取的字符串从第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());
}