Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java模式匹配中获取分隔符_Java_Split_Design Patterns_Delimiter - Fatal编程技术网

在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;
}