我想将a/bc/de/f
分割为[a, bc, de, f]
,将/a/bc/de/f
分割为[/a, bc, de, f]
。
有没有办法在不在字符串开头的/
上拆分? (我的Regexp日很糟糕。)
答案 0 :(得分:10)
(?!^)/
似乎有效:
public class Funclass{
public static void main(String [] args) {
String s = "/firstWithSlash/second/third/forth/fifth/";
String[] ss = s.split("(?!^)/");
for (String s_ : ss)
System.out.println(s_);
}
}
输出:
/firstWithSlash
second
third
forth
fifth
正如 @user unknown 所评论的那样,这似乎是一个错误的表达式,它应该是(?<!^)/
来表示负面的背后隐藏。
答案 1 :(得分:3)
难道你不能在开头添加一张支票,看看开头是否有斜线?
if( str.charAt(0) == '/' ) {
arr = str.substring(1).split( "/" );
arr[0] = "/"+arr[0];
} else
arr = str.split( "/" );
或者更简单一点:
arr = str.charAt(0) + str.substring(1).split( "/" );
如果第一个是斜杠,它只会在第一个标记开头的斜杠上打一针。如果第一个标记中只有一个字符(不是以斜杠开头),那么第一个数组元素就是空字符串,它仍然可以工作。
答案 2 :(得分:3)
最简单的解决方案可能只是在s.substring(1)
上拆分/
,然后将s.charAt(0)
添加到第一个结果中。
除此之外,由于拆分正则表达式没有锚定,因此这样做很有挑战性。你想要拆分“不是行的开头,然后是斜线”的东西 - 即[^^ ]/
- 但这意味着斜杠前面的字符也被剥离了。为了做到这一点,你需要负面的后视,但我不认为String.split正则表达式支持这种语法。
编辑:根据Pattern javadocs,似乎Java 确实支持负面反对,并且以下正则表达式可以完成这项工作:
s.split("(?<!^)/");
快速测试表明这确实可以满足您的需求。