如何基于#后的首个-分割字符串,获取目标前缀内容?
解决方案
针对你的需求,要精准识别#之后的第一个-并截取其之前的内容,完全可以基于#的位置来实现,避免误判#之前的-。这里提供两种实用方法:
方法一:基于索引定位
先找到#的位置,再从该位置之后开始查找第一个-,根据查找结果决定截取范围:
String targetStr = "MyTeam/running#324242-BC2_asd213"; // 或者 "MyTeam/walking-dead#324242" int hashPos = targetStr.indexOf("#"); if (hashPos != -1) { // 从#的下一位开始找第一个- int dashPos = targetStr.indexOf("-", hashPos + 1); if (dashPos != -1) { targetStr = targetStr.substring(0, dashPos); } // 如果#之后没有-,则保持原字符串不变 } // 处理后结果: // 对第一个字符串得到 "MyTeam/running#324242" // 对第二个字符串得到 "MyTeam/walking-dead#324242"
方法二:正则表达式替换
用正则匹配#之后到第一个-的部分,直接替换掉-及之后的内容,代码更简洁:
String targetStr = "MyTeam/running#324242-BC2_asd213"; // 正则规则:匹配#开头到第一个-的内容,保留这部分,去掉后面的内容 targetStr = targetStr.replaceAll("(#.*?)-.*", "$1");
这个正则的逻辑是:(#.*?)捕获#开始到第一个-前的所有内容(.*?是非贪婪匹配,确保只取到第一个-),然后用捕获到的内容替换整个匹配的部分。如果#之后没有-,正则不会匹配,字符串保持原样。
对比你原来的lastIndexOf("-")方法,这两种方法都能精准避开#之前的-,完全满足你的需求。
内容的提问来源于stack exchange,提问作者AnOldSoul
相关产品推荐
相关产品推荐

