如何在java中分割字符串?
问题描述:
我想分割的字符串如下所示。如何在java中分割字符串?
String text = " *Some text* *Another text* *Yet another text* **last text**";
我需要拆分上面的字符串,以便我可以得到像下面这样的数组。
String[] array = {"Some text", "Another text", "Yet another text", "last text"}
如果你注意到,前三个文本有星号(*)在他们身边,而最后一个周围有两个星号。
此外,文本之间可以有空格,例如。 *Some text*
。
会有不文本和*
例如之间的任何空间*Text* - will happen
* some text * - will not happen
谁能帮助,因为我不知道正则表达式的那么多。
答
以下是你的问题推导出的规格和评论:
- 初始
*
应遵循的字字符(字母/数字/下划线) - 尾随
*
应该用字字符 前面非字字符后星号或字符串和befo开始 -
您可以使用单纯的"\\B\\*\\b([^*]+)\\b\\*\\B"
模式断言星号(\\B\\*\\b
的预期位置再一个字字符,并\\b\\*\\B
- 串的非字字符/结束一个字字符之前和之后的星号),和抓住1个或多个字符比*
其它成组1.
String s = " *Some text* *Another text* *Yet another text* **last text**";
Pattern pattern = Pattern.compile("\\B\\*\\b([^*]+)\\b\\*\\B");
Matcher matcher = pattern.matcher(s);
while (matcher.find()){
System.out.println(matcher.group(1));
}
一个更复杂的变化,以仅检查星号随后/之前或不与空格(start|space
+ *
+ non-space
+ any_chars_not_parens
+ non-space
+ *
+ space|end
)可以是
"(?<!\\S)\\*(?!\\s)([^*]+)(?<!\\s)\\*(?!\\S)"
那么,会不会有'String text =“* Some \\ * text *”'?或者'String text =“* .Some text。*”'?只是为了确认:界限是'space' +'*'+'non-space' ...'non-space' +'*'+'space' –
@WiktorStribiżew单个星号将围绕每个文本。双星号将仅包围最后一个文本。文本或任何其他特殊字符之间不会有其他星号。文本的数量可以像一两个不同。在这种情况下,最后一段文字总是有两个星号。 – ashishjmeshram
为什么downvote? – ashishjmeshram