返回信息流题目是这样的:
Validate if a given string is numeric.
Some examples:
"0" => true
" 0.1 " => true
"abc" => false
"1 a" => false
"2e10" => true
Note: It is intended for the problem statement to be ambiguous. You should gather all requirements up front before implementing one.
题目网址https://oj.leetcode.com/problems/valid-number/
下面是我找到的正确答案,可以运行。
public class aa {
public static void main(String[] args) {
String s1="ssa sa";
String s2="19e-4";
judge j=new judge();
boolean x=true;
boolean y=true;
x=j.isNumber(s1);
y=j.isNumber(s2);
System.out.println(x);
System.out.println(y);
}
}
class judge
{
public boolean isNumber(String s) {
s = s.trim();
try {
double a = Double.parseDouble(s);
} catch (NumberFormatException e) {
return false;
}
if(s.substring(s.length()-1,s.length()).equals("f")||
s.substring(s.length()-1,s.length()).equals("F")||
s.substring(s.length()-1,s.length()).equals("d")||
s.substring(s.length()-1,s.length()).equals("D")
)
return false;
return true;
}
}
我的问题在这里
[code=java]double a = Double.parseDouble(s);为什么转换成double ?a用到哪里了?
if(s.substring(s.length()-1,s.length()).equals("f")|| 这里的equalsf F d D什么意思 搞不清楚。。。
s.substring(s.length()-1,s.length()).equals("F")||
s.substring(s.length()-1,s.length()).equals("d")||
s.substring(s.length()-1,s.length()).equals("D")
这是一条镜像帖。来源:北邮人论坛 / java / #36424同步于 2014/11/19
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖
leetcode上面一个小问题,求助
nonono8200
2014/11/19镜像同步7 回复
订阅后,新回复会通过你的通知中心匿名送达。
7 条回复
1.double a = Double.parseDouble(s);这句话的目的在于转换(String -> Double)报异常,而不是拿到a值。即用于判定s是不是numeric;
2."f","F","d","D",是float和double的首字母,用于判定转换的时候最后一个带的字幕是不是正确的。比如说"14.0f","223.333d","2D",这些都是正确的,但"14.6x","3.6b"这样的就是错误的
谢谢! 还有个小问题,你说“ f","F","d","D",是float和double的首字母,用于判定转换的时候最后一个带的字幕是不是正确的”举个例子,10.1123这个数字 带进去判断的话肯定是true 。 是不是哪怕我没有写成10.1123d,计算机也默认后面有一个10.1123数字后面有一个d?
【 在 lixing 的大作中提到: 】
: 1.double a = Double.parseDouble(s);这句话的目的在于转换(String -> Double)报异常,而不是拿到a值。即用于判定s是不是numeric;
: 2."f","F","d","D",是float和double的首字母,用于判定转换的时候最后一个带的字幕是不是正确的。比如说"14.0f","223.333d","2D",这些都是正确的,但"14.6x","3.6b"这样的就是错误的
这个有个偷巧的方法,就是用正则。
public class Solution {
public static boolean isNumber(String s) {
if(s.trim().isEmpty()){
return false;
}
String regex = "[-+]?(\\d+\\.?|\\.\\d+)\\d*(e[-+]?\\d+)?";
if(s.trim().matches(regex)){
return true;
}else{
return false;
}
}
}
【 在 nonono8200 的大作中提到: 】
: 谢谢! 还有个小问题,你说“ f","F","d","D",是float和double的首字母,用于判定转换的时候最后一个带的字幕是不是正确的”举个例子,10.1123这个数字 带进去判断的话肯定是true 。 是不是哪怕我没有写成10.1123d,计算机也默认后面有一个10.1123数字后面有一个d?
不好意思,我理解错了。是带“ f","F","d","D"这几个字母的是错的,不带的话是对的。因为如果你输入"1.4f",如果按照常理,它并不是一个数,而Double.parseDouble()会把它认为是一个float,所以要排除这种情况。
判断是不是f等结尾的条件看着晕
if(s.endsWith("f")||s.endsWith("F")||s.endsWith("d")||s.endsWith("D")){
return false;
}
楼上的正则表达式忽略了形如“3E3”的,把形如“3.e2”也识别成数字(编译器认这种形式,但写成这样的字符串我觉得不是),换成这样会不会更符合点?
String reg="[-+]?\\d+(\\.\\d+)?([eE][-+]?\\d+)?";