(Java относится к предложению) строка, представляющая значение

1. Анализ вопроса

Пожалуйста, реализуйте функцию, чтобы определить, представляет ли строка значение (включая целые и десятичные числа).

Например, строка "+100","5e2","-123","3.1416"и "-1E-16"обе представляют собой числовые значения.
Впрочем, "12e","1a3.14","1.2.3","+-5"и "12e+4.3"нет.

Ключ к этому вопросу правильный + - . e E, обсуждение этих 5 символов

(1) e / E не может появляться дважды одновременно и должен сопровождаться числом.
(2) Положительный и отрицательный знак, если он появляется впервые, либо позиция находится в начале, либо сразу после e / E, если это второй Второе вхождение должно следовать сразу за e / E.
(3) Десятичная точка не может появляться дважды и не может появляться после e / E

Во-вторых, код

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

Три, резюме

Ключ состоит в том, чтобы заранее отметить E / e, десятичную точку и знак, чтобы определить количество вхождений

рекомендация

отblog.csdn.net/nanhuaibeian/article/details/108545561
рекомендация