如何拆分Java字符串但保留其部分';内容?

如何拆分Java字符串但保留其部分';内容?,java,Java,我正在研究java字符串拆分。我希望根据“.uppercase”(在“”和“uppercase”之间有一个空格)拆分字符串,例如: ". A" ". B" ". C"... 另外,我想保留“.”和“大写”,有没有有效的方法?我用 String.split("\\.\\s") 之前,但它会删除我使用的“.”。所以这不是一个理想的解决方案。谢谢 样本结果 String = This is an Egg. This is a dog. "I just come up with this exam

我正在研究java字符串拆分。我希望根据“.uppercase”(在“
”和“uppercase”之间有一个空格)拆分字符串,例如:

". A" ". B" ". C"...
另外,我想保留“.”和“大写”,有没有有效的方法?我用

String.split("\\.\\s") 
之前,但它会删除我使用的“.”。所以这不是一个理想的解决方案。谢谢

样本结果

String = This is an Egg. This is a dog. "I just come up with this example"
String[0] = This is an Egg.
String[1] = This is a dog. "I just come up with this example"
更多编辑:

有一个问题是,通常的方法似乎会将分隔符保留在它的一个字符串中。但我希望在某种意义上拆分分隔符。(在我的示例中,“[A-Z]”也被拆分)

给你:

使用
str.replaceAll(“.”、“

str.replaceAll(“.”、“

然后使用
String.split(“##”)

这将为您提供所需的字符串

给你:

使用
str.replaceAll(“.”、“

str.replaceAll(“.”、“

然后使用
String.split(“##”)

这将为您提供所需的字符串

您可以使用:

如果不希望包含该空间,只需将其放在lookaround断言之间:

str.split("(?<=\\.)\\s+(?=\p{Lu}")
对于上面的示例字符串。

您可以使用:

如果不希望包含该空间,只需将其放在lookaround断言之间:

str.split("(?<=\\.)\\s+(?=\p{Lu}")


对于上面的示例字符串。

如果您提供了示例字符串输入,并且字符串[]输出标记是您所期望的,则会有所帮助。问题是split函数没有将分隔符作为返回字符串的一部分返回。您可以使用substring非常轻松地更正自己的拆分,并手动保留所需的字符串。如果您提供了示例字符串输入以及所需的字符串[]输出标记,则该字符串的精确副本会有所帮助。问题是拆分函数不会将分隔符作为返回字符串的一部分返回。你可以很容易地用substring来纠正你自己的分割,并手动保留你想要的字符串。它的精确副本…它将分隔符保留在第二个字符串上,而我希望将第一部分保存在第一个字符串中,将第二部分保存在第二个字符串中string@JLTChiu:已编辑以使用“向后看”和“向前看”。@JLTChiu:请检查我的新编辑。我将
[A-Z]
更改为
\p{Lu}
,以便正则表达式处理非ASCII文本。非常感谢,您的帮助非常有用嗯…它将分隔符保留在第二个字符串处,而我希望将第一部分保存在第一个字符串中,将第二部分保存在第二个字符串中string@JLTChiu:已编辑以使用“向后看”和“向前看”。@JLTChiu:请检查我的新编辑。我将
[A-Z]
更改为
\p{Lu}
,以便正则表达式处理非ASCII文本。非常感谢,您的帮助非常有用。我没有否决这一点,但这与OP的要求相去甚远。他要求的是拆分单独的行。我想这个方法会帮到他。@VIPIN:不,他要求在分裂时保留分隔符。@VIPIN:你是出于报复还是什么原因否决了我?这根本不公平。@VIPIN:哪种解决方案是不正确的?我已经取消了我的否决票,因为你是正确的,你的解决方案在一定程度上有效。但它不符合规格。例如,如果字符串中已经有一个
##
,或者空格后面没有大写字符,或者
\t
\n
被用作空格,那么它就不起作用。我没有对此投反对票,但这与OP的要求相去甚远。他要求的是拆分单独的行。我想这个方法会帮到他。@VIPIN:不,他要求在分裂时保留分隔符。@VIPIN:你是出于报复还是什么原因否决了我?这根本不公平。@VIPIN:哪种解决方案是不正确的?我已经取消了我的否决票,因为你是正确的,你的解决方案在一定程度上有效。但它不符合规格。例如,如果字符串中已经存在
##
,或者如果空格后面没有大写字符,或者如果
\t
\n
用作空格,则此选项无效。
str.split("(?<=\\.)\\s+(?=\p{Lu}")
{ "First sentence.", 
  "Foo bar. test" }