Java 如何检测字符串中的n个短语或单词

Java 如何检测字符串中的n个短语或单词,java,arrays,string,arraylist,Java,Arrays,String,Arraylist,我有一个字符串s1(包含许多英语句子)、一个字符串l1列表(其中包含公共汽车、房子、火车、火车引擎、火车引擎的寿命(字数永远不超过3)等元素)、一个字符串l2列表(类似于l1)和一个整数n 对于l1的每个元素,我必须在s中找到l1的其他元素或l2的其他元素(l1的元素可以在s中出现多次,我们必须在每次出现时找到它),以便它们之间的距离(距离以单词数表示,例如:我有xyz。在这种情况下,I和xyz之间的距离为2)由此可知,l1的元素在l1元素的任一侧小于或等于n。这些单词/短语(l1或l2元素)将

我有一个字符串s1(包含许多英语句子)、一个字符串l1列表(其中包含公共汽车、房子、火车、火车引擎、火车引擎的寿命(字数永远不超过3)等元素)、一个字符串l2列表(类似于l1)和一个整数n

对于l1的每个元素,我必须在s中找到l1的其他元素或l2的其他元素(l1的元素可以在s中出现多次,我们必须在每次出现时找到它),以便它们之间的距离(距离以单词数表示,例如:我有xyz。在这种情况下,I和xyz之间的距离为2)由此可知,l1的元素在l1元素的任一侧小于或等于n。这些单词/短语(l1或l2元素)将存储在java的列表中

e.g.:
Input:
s= i am asd fgh and studying in zxc vbn bnmkl. i am 100 years old.(may contain other symbols too)
l1= i
l2=asd, fgh, zxc, vbn
n=3.

Output:
asd,fgh,zxc,vbn



               for(int j=0;j<l1.size();j++){
                    String s1=l1.get(j);
                    int index = s.indexOf(s1);
                    while(index >= 0) {
                       System.out.println(index);
                       for(int k=0;k<n;){
                           // how to detect the words before and after that element of l1 such that distance is <= n on either side in a passage and they are contained in either l1 or l2.
                       }
                   index = s.indexOf(s1, index+1);
                   }
               }
例如:
输入:
s=我是asd fgh,在zxc vbn bnmkl学习。我已经100岁了。(可能还包含其他符号)
l1=i
l2=asd、fgh、zxc、vbn
n=3。
输出:
asd、fgh、zxc、vbn
对于(int j=0;j=0){
系统输出打印项次(索引);

对于(int k=0;k谷歌是你最好的朋友,它也是一个非常简单的函数,可以用不同的方式解释

使用循环(for、foreach、while)可能很有用,下面的链接就是这样的例子。 &&

现在有了搜索功能,问题是如何使用多个过滤器设置它


这里有一个一般的例子

例如,如果s2将成为字符串数组

 string[] table = s2.split(' '); // this would do that
然后您可以使用for循环遍历每个过滤器,如下所示:

 for (int i = 0; i < table.length(); i++) 
{
  string filter = table[i]; //this would get the filter of the current loop
  // search function here as well as your counters (refer to examples provided)
}
for(int i=0;i

这是另一个例子

  String table_filter = l2.split(" "); //this would split your filter string into an array (at every space) String table_s = s.split(" ");
 //this would split your string into an array (at every space)

 for (int i = 0; i < table_filter.size(); i++){     
 for (int j = 0; j <
 table_s.size(); j++)   
  {     
     // do stuff (like comparing if this = that then do this or using a switch )}
String table_filter=l2.split(“”;//这会将过滤器字符串拆分为一个数组(在每个空格处)String table_s=s.split(“”);
//这会将字符串拆分为一个数组(在每个空格处)
对于(inti=0;i
我们不会为您生成代码。开始编码。当您有一些代码时,请回来询问有关您不理解的部分的具体问题。您应该看看正则表达式。我已经添加了代码并添加了需要帮助的部分(作为注释)。而不是问“您能帮我实现这个吗?”这只是一种亲切的表达方式,“你能帮我吗?”,我们建议您尝试和试验您的代码,并提出一个与疑问直接相关的特定问题。这并不是说我们没有帮助,但这样您的问题及其答案也会对其他人有所帮助。我意识到在java中,拆分不同于c#,您必须搜索如何将字符串拆分为字符串表,只需键入“Java split()”在Google中,您将有数百个示例。我添加了代码,并添加了我需要帮助的部分。您解决方案中的问题是,s是一个段落,其中可以包含“.”、“,”等符号,也可以用作分隔符。在java中拆分字符串:我认为上述方法的问题是,如果元素位于t中,该怎么办next或next to next数组元素。这可以检查,但这会使它太复杂。相反,更好的方法是检查该元素的索引,并在该元素前后检测n个单词,检查其中是否包含l1或l2的元素。但是,我无法用java编写此语句。