《剑指offer》 字符串第八题: 表示数值的字符串
2024-01-03 09:22:25
题目描述:
请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。
例如,字符串"+100", "5e2", "-123"," 3.1416" 和 "-1E-16" 都表示数值。
但是 "12e", "1a3.14", "1.2.3", "+-5" 和 "12e+4.3" 都不是。
思路:
一个字符串只能出现一次e,且e不是最后一位; 小数点只能出现一次 ; +/- 只能在头/尾/e之后
而小数点只能出现在e前,如果出现在e后也就是指数部分,那么是错的,返回false。
代码实现
package 字符串;
class Stringlcz
{
public boolean solution(String s)
{
if(s==null)
return false;
boolean sign=false,decimal=false,hasE=false; //标记符号、小数点、指数符号E是否出现过
for(int i=0;i<s.length();i++)
{
if(s.charAt(i)=='e'||s.charAt(i)=='E') //E不能是最后一位,后面必须跟指数
{
if(i==s.length()-1)
return false;
if(hasE) //E只能出现一次
return false;
hasE=true;
}
else if(s.charAt(i)=='.')
{
if(hasE||decimal) //注意hasE如果是true,表示前面已经出现过e了,后面不能跟小数点了
return false;
decimal=true;
}
else if(s.charAt(i)=='+'||s.charAt(i)=='-')
{
if(!sign&&i!=0&&s.charAt(i-1)!='e'&&s.charAt(i-1)!='E') //!sign:保证在之前没有出现过正负号,确保正负号只出现一次。
return false;
if(sign&&s.charAt(i-1)!='E'&&s.charAt(i-1)!='e')
return false;
sign=true;
}
else if(s.charAt(i)>'9'||s.charAt(i)<'0')
return false;
}
return true;
}
public static void main(String[] args) {
Stringlcz l=new Stringlcz();
String s="-100";
String s1="12e+4.3";
String s2="1.23e4";
String s3="-789.01234";
String s4="+-12";
String s5="12E-4";
System.out.println(l.solution(s));
System.out.println(l.solution(s1));
System.out.println(l.solution(s2));
System.out.println(l.solution(s3));
System.out.println(l.solution(s4));
System.out.println(l.solution(s5));
}
}
运行结果:
文章来源:https://blog.csdn.net/y6533/article/details/135352618
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!