在Java中恢复string.split()拆分的字符串

在Java中恢复string.split()拆分的字符串,java,regex,string,split,Java,Regex,String,Split,我有一个字符串“我爱a。我恨B”。如果我使用 string.split("\\p{Punct}") 我将得到两个字符串,string1将是“I love A”,string2将是“I hate B”。请注意,除了“”之外,我还可以使用任何其他标点符号。如何使用正确的标点字符恢复拆分操作之前的准确字符串。保留对该字符串的引用-如果您可以有任何点,如果使用以下正则表达式(使用a)拆分,您无法猜到之前有什么: 现在,您可以将数组的元素重新连接在一起以恢复原始字符串 演示:您可以使用StringT

我有一个字符串“我爱a。我恨B”。如果我使用

 string.split("\\p{Punct}") 

我将得到两个字符串,
string1
将是“I love A”,
string2
将是“I hate B”。请注意,除了“”之外,我还可以使用任何其他标点符号。如何使用正确的标点字符恢复拆分操作之前的准确字符串。

保留对该字符串的引用-如果您可以有任何点,如果使用以下正则表达式(使用a)拆分,您无法猜到之前有什么:

现在,您可以将数组的元素重新连接在一起以恢复原始字符串


演示:

您可以使用StringTokenizer并使用方法nextElement()管理元素

样品

String str = "I love A. I hate B";

StringTokenizer st = new StringTokenizer(str,".");

String beforeElement;
String otherElement;

while (st.hasMoreElements()){

    beforeElement=st.nextElement();

     if(st.hasMoreElements()){

       otherElement=st.nextElement();

    }

}

你的意思是我不能保存与正则表达式匹配的记录吗?在Perl中,它就像拆分(/(\p{Punct})/,$string)一样简单。这将产生一个包含3个元素的列表
(“我爱a”、“我恨B”)
String s = "I love A. I hate B.";
String res[] = s.split("(?<=\\p{Punct})");
System.out.println(Arrays.toString(res));
[I love A.,  I hate B.]
String str = "I love A. I hate B";

StringTokenizer st = new StringTokenizer(str,".");

String beforeElement;
String otherElement;

while (st.hasMoreElements()){

    beforeElement=st.nextElement();

     if(st.hasMoreElements()){

       otherElement=st.nextElement();

    }

}