bar*_*nos 34 java regex string
我有String str,我想从中提取不包含可能前缀的子字符串"abc".
首先想到的解决方案是:
if (str.startsWith("abc"))
return str.substring("abc".length());
return str;
Run Code Online (Sandbox Code Playgroud)
我的问题是:
是否有一种"更清洁"的方式来使用它split和"abc" 前缀的正则表达式?
如果是,它的效率是否低于上述方法(因为它在整个字符串中搜索)?
如果是的话,有没有更好的方法("更好的方式"=清洁和有效的解决方案)?
请注意,"abc"前缀可能出现在字符串的其他位置,不应删除.
谢谢
anu*_*ava 40
这行代码比上面的代码短:
return str.replaceFirst("^abc", "");
Run Code Online (Sandbox Code Playgroud)
但就性能而言,我猜两个代码之间不会有任何实质性差异.一个使用正则表达式,一个不使用正则表达式,但搜索和子串.
mse*_*ach 11
一个无正则表达式的解决方案(我需要这个,因为我要删除的字符串是可配置的并且包含反斜杠,需要转义才能在正则表达式中进行文字使用):
Apache Commons Lang将从开始处StringUtils.removeStart(str, remove)删除using和。removestrString.startsWithString.substring
该方法的源代码内容丰富:
public static String removeStart(final String str, final String remove) {
if (isEmpty(str) || isEmpty(remove)) {
return str;
}
if (str.startsWith(remove)){
return str.substring(remove.length());
}
return str;
}
Run Code Online (Sandbox Code Playgroud)
使用String.replaceFirstwith ^abc(匹配前导abc)
"abcdef".replaceFirst("^abc", "") // => "def"
"123456".replaceFirst("^abc", "") // => "123456"
"123abc456".replaceFirst("^abc", "") // => "123abc456"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
26099 次 |
| 最近记录: |