在串口数据传输时,如何将一个串口传输过来的字符串转化为数字?通过分析数字的特征来获得想要的信息,解决了好久,今天处理了这个问题,写一点东西。
问题描述:
将一个字符串转化为数字,如String str =“123”;转化为 int num=123;我的实现代码是这个样子的,
import java.util.Date;
public class Demo {
public static void main(String []args) {
String a="123034";//获得字符串
int newNum=Integer.valueOf( a).intValue();//转化为数字
System.out.println(newNum);
}
}
运行结果如下:
然而如果转化的字符串为String a=q12344;则运行结果为:
如果转化的字符串中有空格呢?如String a=" 12244";
这样的话,For input string :" 12244";这个错误困惑我好久,如何解决这个问题呢?
问题分析:
字符串转换为数字是在串口传输数据中应用到的,因为串口传输过来的数据为字符型,将其转换为数字可获得一些有用信息,如String str =“123”;转化为 int num=123,然而转换的过程中老是出现For input string :" "的错误,在网上查了好久,说明是类型转换错误,但没有找到解决问题的方法。
我的问题是将一个串口传输过来的字符串转换为数字,那么,如何转换呢?
字符串是利用String定义的一串字符,如直接赋值:String str = “Hello World”; 构造方法实例化 :String str = new String(“Hello World”);字符串的组成有很多种,字母,数字,空格键,等等。
如果要求在一个字符串中获得该字符串的数字 ,就得除去其中的不是数字的字符,然后显示剩下的字符,即数字,故而我现在要面对的是给出一个字符,将其中的数字提取出来形成一个新字符,然后在将其转化为数字。
那么,转化就分为两步,第一步是除去字符串中不是数字的字符,形成一个数字形式的字符串。第二步,将数字形式的字符串转化为数字,
第一步,一个字符串中有很多字符,比如说空格符,字母,数字,等,如何删除呢?对于一个给定的字符,先判断有没有空格符,利用String类中的trim()删除空格,在API上搜String看到:
然后判断字符串是否为空,若不是,则从字符串从前向后遍历,字符串和数字有各自的ASSCL码,可以判断通过判断数字的ASSCL码,来筛选数字然后将其存入到另一个字符串中。
第二步,将获得的数字字符串转化为数字,利用int newNum=Integer.valueOf( ).intValue();来实现。
问题解决:
public class Demo01 {
public static void main(String[] args) {
String str = "l $%^&*# ove23n ext234 csdn34 23java eye";
str=str.trim();//除去空格符
String str2=""; //定义新字符串
if(str != null && !"".equals(str)){//若字符串不为空
for(int i=0;i<str.length();i++){//遍历字符串
if(str.charAt(i)>=48 && str.charAt(i)<=57){//提取数字
str2+=str.charAt(i);
}
}
}
int newNum=Integer.valueOf( str2).intValue();//字符串和数字类型转化
System.out.println(newNum);
}
}
结果为:
**
问题反思:
**
现在看来只是一个小问题,仅仅设计到字符串和数字的类型转化问题,那么·,在为什么这个问题困惑自己那么久还是得不到解决?在出现这个问题以后,首先自己找解决For intput String 的问题,得知是类型转化错误,以后一直找解决方法,其实正确应该是找到字符串和数字类型转化的解决方法,而不是执迷于For intput String 的解决,毕竟For intput String 是类型转化错误的一种,找到能够正确解决数字和字符串类型转化的方法,不也就解决了For intput String 的问题了吗?可见这是一种解决问题的方法和思路,从根源解决问题,而不是仅仅停留在表面,这让我想起来麦肯锡方法,分析问题的方法是:界定问题,分析问题,问题排序,问题分析,关键分析,归纳总结,沟通交流,自己应该在将这种分析问题的思路应用到工作和实践中,而不是闭门造车,仅此以上。
@尚拙,愿我此生不负,愿我终将成人。