(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回表示することはできず、その後に数字を続ける必要があります。
(2)正符号と負符号は、最初に表示される場合は、位置が最初または2番目の場合はe / Eの直後にあります。 2番目のオカレンスはe / Eの直後に続く必要があります。
(3)小数点は2回出現できず、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