我有一些文字,例如:
DESC:方式 农奴制是如何在俄罗斯发展并离开俄罗斯的? ENTY:cremat 哪些电影以大力水手道尔为主角? DESC:manner 如何找到名人的真实姓名列表?
我逐行阅读它们,我想将每一行转换为一个string Array
单词一个单词。像这样:
Array = [DESC, :, 方式, How, did, serfdom ,develop, in ,and ,then ,leave, Russia ,?]
String[] arr = str.replaceAll(":"," : ").split(" ");
对于您的示例:
String[] part = line.split(":| ");
line
您的示例行在哪里。
请注意,正则表达式中的space
后面有一个。|
我建议阅读正则表达式并使用像 Expresso 这样的工具来试用它们。
字符串值 = ""; String[] 值 = value.split(" ");
这应该让您将数组按空格作为分隔符。
如果您不介意从结果中删除标点符号,String#split("\\W")
(拆分为非单词字符)会这样做:
// you've got this from the input parser
String inputLine = "DESC:manner How did serfdom develop in and then leave Russia ?";
String[] wordArray = inputLine.split("\\W");
这给出了:
wordArray = [DESC, manner, How, did, serfdom, develop, in, and, then, leave, Russia]
如果您需要标点符号,我认为正则表达式无法做到这一点,因为它通过破坏匹配的字符来进行拆分。
您可以使用Guava 的 Splitter:
Iterable<String> wordsIterable = Splitter.on(Pattern.compile("\\b")).trimResults().omitEmptyStrings().split(string);
String[] words = Iterables.toArray(wordsIterable, String.class);
对于更全面的解决方案,您可以使用边界匹配器,如此处所述
String s = "DESC:manner How did serfdom develop in and then leave Russia ?";
String[] split = s.split("\\b");
拆分数组包含您要查找的内容。
你的意思是你想把你的字符串线分割成一个字符串数组。
有两种方便的方法可以做到这一点。
首先当然是拆分方法。你可以在 j2se String 类中引用这个方法。
第二个是正则表达式模式。你可以参考 j2se 正则表达式类中的信息
问题是您想保留一些分隔符而不是其他分隔符(保留:
并松开空格)。我认为你需要一个正则表达式来完成这个。这样的事情应该这样做:
String str = "DESC:manner How did serfdom develop in and then leave Russia ?";
String arr[] = str.split("((?<=:)|(?=:))|( )");
这使用 Lookahead 和 Lookbehind RegEx 来查找/保留分隔符:
,同时我们添加了一个正常的拆分空间( )
来丢弃那些。
在此 arr 之后应该是:
arr = [DESC, :, manner, How, did, serfdom, develop, in, and, then, leave, Russia, ?]