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