如何通过 String.startsWith() 方法检查协议变量是否以 API_ 为前缀?
- 内容介绍
- 相关推荐
本文共计667个文字,预计阅读时间需要3分钟。
相关专题
直接用 string.startswith() 方法即可判断协议变量是否以 "api_" 开头,注意大小写敏感、空值防护和前缀边界(避免误匹配如 "api_token" 被当成合法协议)。
基础用法:检查是否以 "API_" 开头
最简单场景下,假设 protocol 是一个非 null 的字符串:
-
protocol.startsWith("API_")返回true表示匹配成功,例如"API_HTTP"、"API_WS" - 返回
false表示不匹配,例如"HTTP"、"api_http"(小写)、"API"(缺下划线)
必须处理 null 和空白字符串
如果 protocol 可能为 null 或空字符串,直接调用 startsWith() 会抛出 NullPointerException 或逻辑错误:
- 推荐先做安全校验:
protocol != null && !protocol.trim().isEmpty() && protocol.startsWith("API_") - 或使用
Objects.nonNull(protocol) && protocol.startsWith("API_")(需确保非空后才调用) - 注意
""或" "对startsWith("API_")均返回false,但不报错;不过业务上通常应拒绝空白值
区分大小写与可选的忽略大小写方案
startsWith() 默认区分大小写。若协议名约定为全大写(如 "API_HTTP"),保持默认即可;若需兼容 "api_http" 或 "Api_Http",可先转为统一大小写再判断:
- 忽略大小写:
protocol != null && protocol.toUpperCase().startsWith("API_") - 更严谨(避免 locale 问题):
protocol != null && protocol.regionMatches(true, 0, "API_", 0, 4)(regionMatches第一个true表示忽略大小写)
避免前缀被截断或误匹配(增强语义准确性)
仅用 startsWith("API_") 无法保证后续内容符合协议命名规范(比如 "API_X" 合法,但 "API_TOKEN" 可能是密钥而非协议)。如需进一步校验,可结合正则或白名单:
- 简单白名单校验:
"API_HTTP".startsWith("API_") && List.of("API_HTTP", "API_WS", "API_GRPC").contains(protocol) - 正则方式(要求 API_ 后至少跟一个字母/数字):
protocol != null && protocol.matches("API_[A-Za-z0-9].*")
本文共计667个文字,预计阅读时间需要3分钟。
相关专题
直接用 string.startswith() 方法即可判断协议变量是否以 "api_" 开头,注意大小写敏感、空值防护和前缀边界(避免误匹配如 "api_token" 被当成合法协议)。
基础用法:检查是否以 "API_" 开头
最简单场景下,假设 protocol 是一个非 null 的字符串:
-
protocol.startsWith("API_")返回true表示匹配成功,例如"API_HTTP"、"API_WS" - 返回
false表示不匹配,例如"HTTP"、"api_http"(小写)、"API"(缺下划线)
必须处理 null 和空白字符串
如果 protocol 可能为 null 或空字符串,直接调用 startsWith() 会抛出 NullPointerException 或逻辑错误:
- 推荐先做安全校验:
protocol != null && !protocol.trim().isEmpty() && protocol.startsWith("API_") - 或使用
Objects.nonNull(protocol) && protocol.startsWith("API_")(需确保非空后才调用) - 注意
""或" "对startsWith("API_")均返回false,但不报错;不过业务上通常应拒绝空白值
区分大小写与可选的忽略大小写方案
startsWith() 默认区分大小写。若协议名约定为全大写(如 "API_HTTP"),保持默认即可;若需兼容 "api_http" 或 "Api_Http",可先转为统一大小写再判断:
- 忽略大小写:
protocol != null && protocol.toUpperCase().startsWith("API_") - 更严谨(避免 locale 问题):
protocol != null && protocol.regionMatches(true, 0, "API_", 0, 4)(regionMatches第一个true表示忽略大小写)
避免前缀被截断或误匹配(增强语义准确性)
仅用 startsWith("API_") 无法保证后续内容符合协议命名规范(比如 "API_X" 合法,但 "API_TOKEN" 可能是密钥而非协议)。如需进一步校验,可结合正则或白名单:
- 简单白名单校验:
"API_HTTP".startsWith("API_") && List.of("API_HTTP", "API_WS", "API_GRPC").contains(protocol) - 正则方式(要求 API_ 后至少跟一个字母/数字):
protocol != null && protocol.matches("API_[A-Za-z0-9].*")

