如何检测字符串是否包含非数字内容?
检测字符串是否包含非数字内容的Java实现
针对你需要的「若字符串包含非数字内容则关闭Bukkit服务器」的逻辑,以下是几种可行的实现方式:
方法一:使用正则表达式(推荐简洁写法)
通过正则匹配整个字符串是否仅由数字组成,若不匹配则说明存在非数字字符:
String argsstring = args[0].toString(); // 判断字符串是否不全为数字,若是则关闭服务器 if (!argsstring.matches("\\d+")) { Bukkit.shutdown(); }
- 说明:
\\d+匹配一个或多个0-9的数字,matches()会检查整个字符串是否符合该规则。 - 若需要支持负数(如
-123),可将正则改为"-?\\d+",同时注意单独的-会被判定为非数字,可额外处理:if (!argsstring.matches("-?\\d+") || argsstring.equals("-")) { Bukkit.shutdown(); }
方法二:逐个字符遍历检查
适合不想使用正则的场景,手动遍历每个字符判断是否为数字:
String argsstring = args[0].toString(); boolean hasNonDigit = false; for (char c : argsstring.toCharArray()) { if (!Character.isDigit(c)) { hasNonDigit = true; break; } } if (hasNonDigit) { Bukkit.shutdown(); }
- 若支持负数,需跳过开头的负号:
String argsstring = args[0].toString(); boolean hasNonDigit = false; int startIdx = argsstring.startsWith("-") ? 1 : 0; if (argsstring.equals("-")) { hasNonDigit = true; } else { for (int i = startIdx; i < argsstring.length(); i++) { if (!Character.isDigit(argsstring.charAt(i))) { hasNonDigit = true; break; } } } if (hasNonDigit) { Bukkit.shutdown(); }
方法三:借助工具类(需引入依赖)
如果你的项目中已经引入了Apache Commons Lang库,可以使用现成的工具方法:
import org.apache.commons.lang3.StringUtils; // ... String argsstring = args[0].toString(); if (!StringUtils.isNumeric(argsstring)) { Bukkit.shutdown(); }
- 说明:
StringUtils.isNumeric()会检查字符串是否全为数字字符,包括Unicode数字,但同样不支持负号,需额外处理负数场景。
内容的提问来源于stack exchange,提问作者vitekform
相关产品推荐
相关产品推荐

