(Java se refiere a ofrecer) una cadena que representa un valor

1. Análisis de preguntas

Implemente una función para determinar si una cadena representa un valor (incluidos números enteros y decimales).

Por ejemplo, la cadena "+100","5e2","-123","3.1416"y "-1E-16"ambos representan valores numéricos.
Sin embargo, "12e","1a3.14","1.2.3","+-5"y "12e+4.3"no.

La clave de esta pregunta es correcta + - . e E, la discusión de estos 5 personajes

(1) e / E no puede aparecer dos veces al mismo tiempo, y debe ir seguido de un número.
(2) El signo positivo y negativo, si aparece por primera vez, la posición está al principio o inmediatamente después de e / E, si es la segunda La segunda aparición debe seguir inmediatamente a e / E.
(3) El punto decimal no puede aparecer dos veces y no puede aparecer después de e / E

Segundo, el código

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;
    }
}

Tres, resumen

La clave es marcar la E / e, el punto decimal y firmar por adelantado para determinar el número de ocurrencias.

Supongo que te gusta

Origin blog.csdn.net/nanhuaibeian/article/details/108545561
Recomendado
Clasificación