在Java模式匹配中获取分隔符
给定一个模式,我们可以使用在Java模式匹配中获取分隔符,java,split,design-patterns,delimiter,Java,Split,Design Patterns,Delimiter,给定一个模式,我们可以使用S.split(pattern)将字符串S切成多个部分。然而,结果不是我想要的。我需要与模式匹配的字符串,即分隔符。我的想法是使用分裂的结果来形成一个新的模式,然后再分裂,但需要考虑的情况下,各种元符号吨。有什么简单的方法吗?看看Java正则表达式: 查看Java正则表达式: 您不能只运行多个拆分,否则可能会得到错误的结果。我可能会使用s.split(模式2) 公共静态向量getDelims(字符串s,字符串模式) { String[]items=s.split(模式2
S.split(pattern)
将字符串S
切成多个部分。然而,结果不是我想要的。我需要与模式匹配的字符串,即分隔符。我的想法是使用分裂的结果来形成一个新的模式,然后再分裂,但需要考虑的情况下,各种元符号吨。有什么简单的方法吗?看看Java正则表达式:
查看Java正则表达式:
您不能只运行多个拆分,否则可能会得到错误的结果。我可能会使用s.split(模式2)
公共静态向量getDelims(字符串s,字符串模式)
{
String[]items=s.split(模式2);
如果(items.length==1)返回新向量();
字符串delim=s.substring(项[0].length());
delim=delim.substring(0,delim.length()-items[1].length());
Vector ret=getDelims(项目[1],模式);
重新添加(0,delim);
返回ret;
}
您不能只运行多个拆分,否则可能会得到不正确的结果。我可能会使用s.split(模式2)
公共静态向量getDelims(字符串s,字符串模式)
{
String[]items=s.split(模式2);
如果(items.length==1)返回新向量();
字符串delim=s.substring(项[0].length());
delim=delim.substring(0,delim.length()-items[1].length());
Vector ret=getDelims(项目[1],模式);
重新添加(0,delim);
返回ret;
}
一个例子将帮助我们帮助您,regex是否有一种“not”操作符?例如,使用伪代码S.split(!pattern)
感谢您的回复。我把这个弄清楚了。这很简单,但很复杂。该模式提供了一个匹配器,该匹配器具有查找和分组的方法,这些方法将使我获得匹配的第一个模式,然后循环获得匹配的所有模式。我希望String有一个方法可以返回所有模式,而不是split。一个例子可以帮助我们帮助你,正则表达式是否有一种“not”操作符?例如,使用伪代码S.split(!pattern)
感谢您的回复。我把这个弄清楚了。这很简单,但很复杂。该模式提供了一个匹配器,该匹配器具有查找和分组的方法,这些方法将使我获得匹配的第一个模式,然后循环获得匹配的所有模式。我希望String有一个返回所有模式的方法,而不是split。最好链接到最新版本的JavaDocs。我已将您的答案编辑为指向J2SE 7。有关获取最新文档链接的提示,请参阅。正如@AndrewThompson在您的问题下的评论中指出的那样,regex有一个not
操作符,您可以使用。not操作符不起作用,因为它会在带有背对背分隔符的字符串上返回不正确的结果。(即空格分隔的字符串上一行有两个空格。)最好链接到最新版本的JavaDocs。我已将您的答案编辑为指向J2SE 7。有关获取最新文档链接的提示,请参阅。正如@AndrewThompson在您的问题下的评论中指出的那样,regex有一个not
操作符,您可以使用。not操作符不起作用,因为它会在带有背对背分隔符的字符串上返回不正确的结果。(即在以空格分隔的字符串上一行有两个空格。)
public static Vector<String> getDelims( String s, String pattern )
{
String[] items = s.split( pattern, 2 );
if( items.length == 1 ) return new Vector<String>();
String delim = s.substring( items[0].length());
delim = delim.substring(0, delim.length() - items[1].length() );
Vector<String> ret = getDelims(items[1], pattern);
ret.add(0, delim);
return ret;
}