Skip to content

Commit d71d3b2

Browse files
committed
Valid Number
1 parent 3cd8c92 commit d71d3b2

File tree

1 file changed

+85
-0
lines changed

1 file changed

+85
-0
lines changed

ValidNumber.java

Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
/**
2+
* Validate if a given string is numeric.
3+
*
4+
* Some examples:
5+
*
6+
* "0" => true
7+
* " 0.1 " => true
8+
* "abc" => false
9+
* "1 a" => false
10+
* "2e10" => true
11+
*
12+
* Note: It is intended for the problem statement to be ambiguous.
13+
* You should gather all requirements up front before implementing one.
14+
*
15+
*/
16+
public class ValidNumber {
17+
public boolean isNumber(String s) {
18+
StringBuffer sb = new StringBuffer(s.trim());
19+
int i = sb.length() - 1;
20+
while (i >= 0 && sb.charAt(i) == ' ') {
21+
i--;
22+
}
23+
sb.delete(i + 1, sb.length());
24+
s = sb.toString();
25+
int length = s.length();
26+
if (length == 0)
27+
return false;
28+
i = 0;
29+
int start = 0;
30+
if (s.charAt(i) == '-' || s.charAt(i) == '+') {
31+
i++;
32+
start++;
33+
}
34+
for (; i < length; i++) {
35+
char c = s.charAt(i);
36+
if (c == 'e' || c == 'E') {
37+
return isDouble(s.substring(start, i)) && isDigitals(s.substring(i + 1, s.length()));
38+
} else if (c != '.' && (c < '0' || c > '9')) {
39+
return false;
40+
}
41+
}
42+
return isDouble(s.substring(start));
43+
}
44+
45+
private boolean isDouble(String s) {
46+
int length = s.length();
47+
if (length == 0 || ((s.charAt(0) == '-' || s.charAt(0) == '+') && length == 1))
48+
return false;
49+
int i = 0, start = 0;
50+
if (s.charAt(i) == '-' || s.charAt(i) == '+') {
51+
i++;
52+
start++;
53+
}
54+
for (; i < length; i++) {
55+
char c = s.charAt(i);
56+
if (c == '.') {
57+
if (i == start && s.length() - i - 1 == 0)
58+
return false;
59+
boolean left = i == start ? true : isDigitals(s.substring(0, i));
60+
boolean right = s.length() - i - 1 == 0 ? true : isDigitals(s.substring(i + 1, s.length()));
61+
return left && right;
62+
} else if (c < '0' || c > '9') {
63+
return false;
64+
}
65+
}
66+
return true;
67+
}
68+
69+
private boolean isDigitals(String s) {
70+
int length = s.length();
71+
if (length == 0 || ((s.charAt(0) == '-' || s.charAt(0) == '+') && length == 1))
72+
return false;
73+
int i = 0;
74+
if (s.charAt(i) == '-' || s.charAt(i) == '+') {
75+
i++;
76+
}
77+
for (; i < length; i++) {
78+
char c = s.charAt(i);
79+
if (c < '0' || c > '9') {
80+
return false;
81+
}
82+
}
83+
return true;
84+
}
85+
}

0 commit comments

Comments
 (0)