本文主要是介绍【剑指offer系列】20-表示数值的字符串(关键字:之前出现过的属性,记为true),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目: 表示数值的字符串
请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100",“5e2”,"-123",“3.1416"和”-1E-16"都表示数值。 但是"12e",“1a3.14”,“1.2.3”,"±5"和"12e+4.3"都不是。
思路:
0。任何一个数值,末尾一定是数字
1。是0-9么,是num=true
2。是".“逗号么,是的话,之前不能出现过逗号(1.2.3),且之前不能e|E(5e+3.2);
3。是e|E么,是的话,之前不能出现过e|E,且之前必须出现过num数字;
4。是”+“或者”-"号么,是的话,他们只能出现在i==0即第一个位置,或者出现在e|E 之后(5e+3),出现在别的位置都不可以
5。除了上述四种情况,都不行
return true(因为,for循环遍历完都满足)
public class Main20 {public static void main(String[] args) {Scanner sc = new Scanner(System.in);String str = sc.next();boolean b = new Main20().isInt(str.toCharArray());System.out.println(b);}private boolean isInt(char[] ch) {if (ch == null || ch.length == 0)return false;boolean num = false; //字符串中是否出现了整数boolean dot = false; //是否出现了逗号boolean e = false; //是否出现了e或者Eif (ch[ch.length-1] > '9' || ch[ch.length-1] < '0') return false;//0.末尾只要不是数字,就不可能是数值for (int i = 0; i < ch.length; i++) {if (ch[i] >= '0' && ch[i] <= '9'){num = true;//此时,记录下整数已出现过}else if (".".equals(String.valueOf(ch[i]))){//1.逗号之前不能出现过逗号“.”和e|Eif (dot || e)return false;dot = true;//此时,记录下,","号已出现过}else if ("e".equals(String.valueOf(ch[i]).toLowerCase())){//2.e|E之前不能有e|E,且必须有数字if (e || !num)return false;e = true;//记录下,e或者E已出现过了}else if ("-".equals(String.valueOf(ch[i])) || "+".equals(String.valueOf(ch[i]))){//3.+-必须在first或者e|E之后(5e+3)if (i != 0 && ! ( "e".equals(String.valueOf(ch[i-1]).toLowerCase()))){//二者均不满足则falsereturn false;}}else {//4.其他符号abc$`/等return false;}}// 都满足return true;}
}
这篇关于【剑指offer系列】20-表示数值的字符串(关键字:之前出现过的属性,记为true)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!