对于刚入门JAVA的小白来说没有指定的API来完成这个操作,只能靠自己的想法来区别字符与整数。
在我刚入门的时候突发奇想,既然JAVA中有字符串转整数的API,那为什么不可以利用呢。于是利用转换异常想到了以下方法`
/**
* 分割出字符串中的数字
* @param str 需要进行分割的字符串
* @return 分割出的整数
*/
public static int quString1(String str){
char[] arr=str.toCharArray();
StringBuilder builder = new StringBuilder();
for (int i = 0; i < arr.length; i++) {
try {
// 如果传入的字符不是整数的话会抛出异常
Integer.parseInt(arr[i]+"");
} catch (Exception e) {
// 如果抛出异常那这个字符肯定不是整数,所以直接跳过他就好了
continue;
}
// 如果没有抛出异常的话那这个字符肯定就是字符类型了
builder.append(arr[i]);
}
return Integer.parseInt(builder.toString());
}
当然以上方法虽然是可行的,但是利用异常来转换带来的隐患也是很大的,再继续研究了一段时间之后我发现了ACSLL码表。所有的字符、符号或者数字在ACSLL码表中都有一个对应的数,其中数字0-9对应的则是48-57。于是现在有了以下方法
/**
* 分割出字符串中的数字
* @param str 需要进行分割的字符串
* @return 分割出的整数
*/
public static int quString(String str){
char[] arr=str.toCharArray();
StringBuilder builder = new StringBuilder();
for (int i = 0; i < arr.length; i++) {
// 如果字符的ACSLL码在48-57的范围内那肯定就是整数了
if(arr[i] >= 48 && arr[i] <= 57) {
builder.append(arr[i]);
}
}
return Integer.parseInt(builder.toString());
}
第二中方式虽然优化了很多,但是在做大量字符串分割的效率上还是慢了很多,于是乎在研究算法效率的道路上有了利用正则表达式的方法
/**
* 分割出字符串中的数字
* @param str 需要进行分割的字符串
* @return 分割出的整数
*/
public static int quString2(String str){
// 将指定字符串中的字符替换
// str.replaceAll(String regex, String replacement)
// 第一个参数是要替换掉str中的谁,第二个参数是要把第一个参数替换成啥。
return Integer.parseInt(str.replaceAll("[^(0-9)]", ""));
}
注意: 在以上三种方法中返回的都是int类型的参数,所以记住不要超出int类型的指定大小哦,或者你也可以直接将build.toString返回
在这大家可以根据自己的理解选取对应的方式,在这我还是推荐大家使用第三种方法
好了,这一期的内容就给大家总结到这了,欢迎大家在评论区进行纠正和补充