[英]Java string split on alphanumeric and new lines?
我有一个test.txt文件,其中包含几行,例如:
"h3llo, @my name is, bob! (how are you?)"
"i am fine@@@@@"
我想将所有字母数字字符和新行拆分为一个arraylist,这样输出将是
output = ["h", "llo", "my", "name", "is", "bob", "how", "are", "you", "i", "am", "fine"]
现在,我尝试用
output.split("\\P{Alpha}+")
但是由于某种原因,这似乎在arraylist的第一个位置添加了逗号,并将换行符替换为空字符串
output = ["", "h", "llo", "my", "name", "is", "bob", "how", "are", "you", "", "i", "am", "fine"]
还有另一种方法可以解决此问题? 谢谢!
-
编辑:我如何确保它忽略新行?
Java的String.split()
行为非常令人困惑。 更好的拆分工具是Guava的Splitter
。 他们的文档更加详细地介绍了String.split()
的问题:
内置的用于拆分字符串的Java实用程序可能会有一些古怪的行为。 例如,
String.split
默默地丢弃尾随的分隔符,而StringTokenizer
恰好尊重五个空白字符,仅此而已。测验:
",a,,b,".split(",")
返回...
"", "a", "", "b", ""
null, "a", null, "b", null
"a", null, "b"
"a", "b"
- 以上都不是
正确的答案不是上述任何一个:
"", "a", "", "b"
。 仅跳过尾随的空字符串。 我什至不知道这是什么。
在您的情况下,这应该起作用:
Splitter.onPattern("\\P{Alpha}+").omitEmptyStrings().splitToList(output);
使用您的正则表达式,将结果放入ArrayList
(因为无论如何这都是您想要的数据结尾),然后只需使用removeIf
删除任何空字符串。
String input = "\"h3llo, @my name is, bob! (how are you?)\"\n\n\"i am fine@@@@@\"";
ArrayList<String> arrayList = new ArrayList<>(Arrays.asList(input.split("\\P{Alpha}+")));
arrayList.removeIf(""::equals);
System.out.println(arrayList);
结果:
[h,llo,我的名字,是鲍勃,你好,我,我很好,]
另一个解决方案是在java.util.regex。*中使用regex包。
它涉及匹配器和模式。
String input = "h3llo, @my name is, bob! (how are you?)\n"+
"i am fine@@@@@";
Pattern p = Pattern.compile("([a-zA-Z]+)");
Matcher m = p.matcher(input);
List<String> tokens = new ArrayList<String>();
while (m.find()) {
System.out.println("Found a " + m.group());
tokens.add(m.group());
}
PS: https: //regex101.com/是测试您的正则表达式模式的一个很好的工具。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.