本文共 3844 字,大约阅读时间需要 12 分钟。
如何判断一个字符串是否表示数值?我们可以通过逐步分析字符串中的每个字符,确保其符合数值表示的规则。以下是详细的步骤:
首先,我们对输入字符串进行去空格处理,这样可以简化后续的处理逻辑。
如果字符串长度为0,直接返回false。
逐个检查每个字符是否符合数值的要求。
允许在开头有符号+或-,但不能在中间或末尾出现(除非是指数部分)。
可以是0-9,或者小数点。
e/E后面必须有数字,可以是正数或负数。
只能出现一次,且不能在中间多次出现,且不能出现在指数部分后面。
检查一些特殊情况,如“1.”、“.1”、“46.e3”等,确保它们有效。
如果所有检查都通过,返回true,否则返回false。
public class Solution { public boolean isNumber(String s) { s = s.trim(); if (s.length() == 0) return false; char[] arr = s.toCharArray(); int len = arr.length; int countDot = 0; boolean haveE = false; for (int i = 0; i < len; i++) { if (!isnum(arr[i]) && !isnor(arr[i])) { return false; } if (arr[i] == 'e' || arr[i] == 'E') { if (haveE) { return false; } haveE = true; if (i - 1 < 0 || i + 1 >= len) { return false; } if (!isnum(arr[i - 1]) && arr[i - 1] != '.') { return false; } if (!isnum(arr[i + 1]) && arr[i + 1] != '-' && arr[i + 1] != '+' && arr[i - 1] != '.' && arr[i + 1] != ' ') { return false; } } if (arr[i] == '+') { if (i == 0) continue; if (i == len - 1) { return false; } if (arr[i - 1] == 'e' || arr[i - 1] == 'E') { continue; } return false; } if (arr[i] == '-') { if (arr[len - 1] == '-') { return false; } if (i - 1 >= 0 && arr[i - 1] != 'e' && arr[i - 1] != 'E') { return false; } } if (arr[i] == '.') { if (i == 0) { countDot++; if (i + 1 < len) { if (!isnum(arr[i + 1])) { return false; } continue; } else { return false; } } if (i == len - 1) { countDot++; if (countDot > 1) { return false; } if (isnor(arr[i - 1]) && i + 1 >= len) { return false; } if (haveE) { return false; } continue; } countDot++; if (!isnum(arr[i + 1]) && arr[i + 1] != 'e' && arr[i + 1] != 'E') { return false; } if (haveE) { return false; } if (countDot > 1) { return false; } } } return true; } private boolean isnum(char en) { char[] num = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' }; for (int i = 0; i < 10; i++) { if (en == num[i]) { return true; } } return false; } private boolean isnor(char en) { char[] nor = { '+', '-', 'e', 'E', '.' }; for (int i = 0; i < 5; i++) { if (en == nor[i]) { return true; } } return false; }} trim()方法去掉首尾空格。isnum方法检查字符是否为数字,isnor方法检查是否为符号或小数点。通过以上步骤,可以准确判断字符串是否表示有效的数值。
转载地址:http://skxb.baihongyu.com/