-
Notifications
You must be signed in to change notification settings - Fork 13
/
Copy pathNumericStrings.java
90 lines (87 loc) · 3.21 KB
/
NumericStrings.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
/**
* Created by Yang on 2017/4/23.
* 表示数值的字符串:
*
* 请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,
* 字符串"+100","5e2","-123","3.1416"和"-1E-16"都表示数值。 但是
* "12e","1a3.14","1.2.3","+-5"和"12e+4.3"都不是。
*/
public class NumericStrings {
/**
* 数值的格式可以表示为I1.U1[e|E]I2
* 其中,I1、I2是整数,U1是无符号整数
* @param str
* @return
*/
public boolean isNumeric(char[] str) {
if(str == null || str.length == 0) {
return false;
}
int index = 0;
if(str[index] == '+' || str[index] == '-') {
index++;
}
// 只有“+/-”,不是数值
if(index >= str.length) {
return false;
}
index = scanDigits(str, index);
// 已经到结尾了,没有小数和指数部分
if(index >= str.length) {
return true;
}
if(str[index] == '.') {
index++;
}
index = scanDigits(str, index);
// 已经到结尾了,没有指数部分
if(index >= str.length) {
return true;
}
if(str[index] == 'e' || str[index] == 'E') { // 判断指数部分
index++;
// “e|E”后没有内容,不是数值
if(index >= str.length) {
return false;
}
if(str[index] == '+' || str[index] == '-') {
index++;
}
// “e|E”后只有“+/-”,不是数值
if(index >= str.length) {
return false;
}
index = scanDigits(str, index);
// 数值 + e|E + 数值
if(index >= str.length) {
return true;
}
}
return false;
}
private int scanDigits(char[] str, int index) {
while(index < str.length && str[index] >= '0' && str[index] <= '9') {
index++;
}
return index;
}
public static void main(String[] args) {
NumericStrings numericStrings = new NumericStrings();
System.out.println(numericStrings.isNumeric("+100".toCharArray()));
System.out.println(numericStrings.isNumeric("5e2".toCharArray()));
System.out.println(numericStrings.isNumeric("-123".toCharArray()));
System.out.println(numericStrings.isNumeric("3.1416".toCharArray()));
System.out.println(numericStrings.isNumeric("-1E-16".toCharArray()));
System.out.println();
System.out.println(numericStrings.isNumeric("12e".toCharArray()));
System.out.println(numericStrings.isNumeric("1a3.14".toCharArray()));
System.out.println(numericStrings.isNumeric("1.2.3".toCharArray()));
System.out.println(numericStrings.isNumeric("+-5".toCharArray()));
System.out.println(numericStrings.isNumeric("12e+4.3".toCharArray()));
System.out.println();
System.out.println(numericStrings.isNumeric("-.123".toCharArray()));
System.out.println(numericStrings.isNumeric("-1.".toCharArray()));
System.out.println();
System.out.println(numericStrings.isNumeric("1+23".toCharArray()));
}
}