(Java bezieht sich auf Angebot) eine Zeichenfolge, die einen Wert darstellt

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

Ich denke du magst

Origin blog.csdn.net/nanhuaibeian/article/details/108545561
Empfohlen
Rangfolge