Java 如果包含列表中的单词,则拆分字符串

Java 如果包含列表中的单词,则拆分字符串,java,java-8,split,Java,Java 8,Split,我正在逐行阅读一个文本文件,如果它们包含特定列表中的单词,我想将每一行拆分 例如: String str1 = BuraBua is the Place I live in. String str2 = New York is the Place I live. 现在我有了一个字符串列表,比如:List li=Arrays.asList(“BuraBura”,“New York”) 我想要像这样的东西: String[] strList = str1.split(// if str1 cont

我正在逐行阅读一个文本文件,如果它们包含特定列表中的单词,我想将每一行拆分

例如:

String str1 = BuraBua is the Place I live in.
String str2 = New York is the Place I live.
现在我有了一个字符串列表,比如:
List li=Arrays.asList(“BuraBura”,“New York”)

我想要像这样的东西:

String[] strList = str1.split(// if str1 contains a word from li then split on that basis);
有什么建议吗
List<List<String>> lo = li.stream()
    .filter(str -> str1.contains(str))
    .map(str -> { return Arrays.asList(str1.split(str)); })
    .collect(Collectors.toList());
.filter(str->str1.contains(str)) .map(str->{return array.asList(str1.split(str));}) .collect(Collectors.toList());

注意:如果您的输入包含多个拆分字符串,则必须进一步修改。如果恰好是这种情况,那么您可以尝试进行循环。希望它能提供一些途径。谢谢

这是一种简单的方法。您可以通过迭代白名单/键来实现

Java 8及更高版本: 不需要使用“过滤器”、“地图”和“收集器”。这是多余的,因为您将获得列表列表。最好通过迭代键来使用简单的“forEach”流。 方法:

private final List key=Arrays.asList(“苹果”、“橙色”);
公共列表getSplitted(字符串文本){
列表部件=新的ArrayList();
键。forEach(键->{
if(text.toLowerCase().contains(key.toLowerCase()))
parts.addAll(Arrays.asList(text.split(key));
});
返回部件;
}

旧Java: 使用simple`for`迭代器 方法

private final List key=Arrays.asList(“苹果”、“橙色”);
公共列表getSplitted(字符串文本){
列表部件=新的ArrayList();
用于(字符串键:键){
if(text.toLowerCase().contains(key.toLowerCase()))
parts.addAll(Arrays.asList(text.split(key));
}
返回部件;
}

测试(groovy):
如果您的需求不同,请发表评论。

到目前为止,您尝试了什么?我尝试在空间上拆分,但当我到达纽约时,我错了,因为纽约合并为一个州。“在此基础上拆分”是一个非常模糊的问题描述。预期的结果是什么?当一个简单的lambda会这样做时,格式化和使用块的组合会使此代码或多或少不可读。使用诸如
contains(key.toLowerCase())
之类的检查,然后执行
text.split(key)
之类的操作,即按原样使用字符串,区分大小写,存在一些基本问题。使用
toLowercase()
检查的预期结果是什么?当字符串为
“Apple”
且文本包含
Apple
时,测试将失败。你也不在乎“文字”。想想当文本包含“苹果”时会发生什么。当文本同时包含“苹果”和“橙色”时会发生什么…
def "Splitter test"() {
   given:
       def text = "I like orange very much. Because orange is very delicious"
   when:
       def result = new Splitter().getSplitted(text)
   then:
       result == ["I like ", " very much. Because ", " is very delicious"]
}