Artikelverzeichnis
1. Fragenanalyse
Bitte implementieren Sie eine Funktion, um festzustellen, ob eine Zeichenfolge einen Wert darstellt (einschließlich Ganzzahlen und Dezimalstellen).
Beispielsweise stehen die Zeichenfolge "+100","5e2","-123","3.1416"
und "-1E-16"
beide für numerische Werte.
Allerdings "12e","1a3.14","1.2.3","+-5"
und "12e+4.3"
nicht.
Der Schlüssel zu dieser Frage ist richtig + - . e E
, die Diskussion dieser 5 Zeichen
(1) e / E kann nicht zweimal gleichzeitig erscheinen und muss von einer Zahl gefolgt werden.
(2) Das positive und negative Vorzeichen, wenn es zum ersten Mal erscheint, befindet sich entweder am Anfang oder unmittelbar nach e / E, wenn es das zweite ist Das zweite Vorkommen muss unmittelbar auf e / E folgen.
(3) Der Dezimalpunkt kann nicht zweimal und nicht nach e / E erscheinen
Zweitens der Code
import java.util.Arrays;
import java.util.Scanner;
/**
* @Auther: Yolo
* @Date: 2020/9/11 16:58
* @Description:
*/
public class Test_11 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("请输入字符串:");
String next = scanner.next();
char[] str = next.toCharArray();
System.out.println(Arrays.toString(str));
boolean result = isNumeric(str);
System.out.println(result);
}
//e的ascii:101,
private static boolean isNumeric(char[] str) {
//标记符号,小数点,e是否出现过
boolean sign = false, decimal = false, hasE = false;
for (int i = 0; i < str.length; i++) {
if (str[i] == 'e' || str[i] == 'E') {
//e 或 E 的后面一定要接数字,不能是末位出现
if (i == str.length - 1) {
return false;
}
//不能同时存在两个 e/E
if (hasE) {
return false;
}
hasE = true;
} else if (str[i] == '+' || str[i] == '-') {
//第二次出现正负号,必须紧接在 e 之后
if (sign && str[i - 1] != 'e' && str[i - 1] != 'E') {
return false;
}
//第一次出现正负号,如果不是在开头,则也必须紧接在 e之后
if (!sign && i > 0 && str[i-1] != 'e' && str[i-1] != 'E') {
return false;
}
sign = true;
} else if (str[i] == '.') {
//e后面不能接小数点,小数点也不能出现两次
if (hasE || decimal) {
return false;
}
decimal=true;
} else if (str[i] < '0' || str[i] > '9') {
//其余的不合法字符
return false;
}
}
return true;
}
}
Drei, Zusammenfassung
Der Schlüssel besteht darin, das E / E, den Dezimalpunkt und das Vorzeichen zu markieren, um die Anzahl der Vorkommen zu bestimmen