我在Java(Java 8)中运行2行以下:
String dirTree = "dir\n\tsubdir1\n\tsubdir2\n\t\tfile.ext";
String[] result = dirTree.split("\\n\\t[^\\t]");
结果显示 - 结果:
["dir", "ubdir1", "ubdir2\n\t\tfile.ext"]
我期待 - 结果:
["dir", "subdir1", "subdir2\n\t\tfile.ext"]
有人可以解释为什么结果中字符串的第一个字符缺失(例如 - “ubdir1”而不是“subdir1”)?
答案 0 :(得分:1)
按此分开:
\n\t(?!\t)
<强>解释强>
\n\t
匹配一个换行符和一个标签(?!\t)
否定前瞻以确保不立即跟进
在\n\t
因此(?!\t)
和[^\t]
之间的区别在于第一个返回 true或false ,第二个匹配该字符。因此,在您的情况下,它匹配非制表符并使用它来分割。
答案 1 :(得分:0)
在应用之前,您必须了解正则表达式模式的工作原理。
您的正则表达式模式为\n\t[^\t]
此搜索带有\n\t
的模式以及除\t
之外的任何字符。 [^\t]
否定了这种模式。此模式匹配除\t
之外的任何字符。因此,在您的情况下,它匹配s
,因为它是除\t
之外的任何字符。
要获得预期结果,您的模式应为\n\t