Java 如何在一个单词(可能出现多次)之后检测字符串中接下来的n个单词,并在数组中将它们分开

Java 如何在一个单词(可能出现多次)之后检测字符串中接下来的n个单词,并在数组中将它们分开,java,arrays,string,Java,Arrays,String,我有一个字符串s,在其中我必须检测单词car并打印接下来的两个单词。然而,目前当我打印单词[i1]时,它给我的感觉非常棒。但它应该给我的是,然后是酷,然后是,然后是可怕的在不同的行sn=2在上述情况下 有人能告诉我这个代码有什么问题吗 String s="car is cool car is awesome."; int index = contents.indexOf(s); while(index >= 0) { String[] words = new String[n];

我有一个字符串s,在其中我必须检测单词car并打印接下来的两个单词。然而,目前当我打印单词[i1]时,它给我的感觉非常棒。但它应该给我的是,然后是酷,然后是,然后是可怕的在不同的行sn=2在上述情况下

有人能告诉我这个代码有什么问题吗

String s="car is cool car is awesome.";
int index = contents.indexOf(s);
while(index >= 0) {
   String[] words = new String[n];
   for (int i3=0;i3<n;i3++){
       words[i3]="";
   }
   int i1=0, i2=index;
   while(true){
       if(i1==n) break;
       if(i2>=contents.length()) break;
       while(true) {
           if(i2>=contents.length()) break;
           if((contents.charAt(i2)+"")==" ") break;
           words[i1]+=(contents.charAt(i2)+"");
           i2++;
       }
       System.out.println(words[i1]);
       i1++;
   }
    index = contents.indexOf(s, index+1);
}

您可以使用以下代码实现您想要的:

String s = "car is cool car is awesome.";
int index = s.indexOf("car ");

if(index >= 0) {
    index += "car ".length()
    String[] words = s.substring(index).split(" ");

    // if you need n words after "car"
    for (int i = 0; i < words.length && i < n; i++) {
        System.out.println(words[i]);
    }
}
应该是这样

if( " ".equals((contents.charAt(i2)+"") )

基于拆分字符串的解决方案:

final int n = 2;
final String sentence="car is cool car is awesome.";
final String[] words = sentence.split("\\W+");
for ( int i = 0; i < words.length; ++i ){
    if ( words[i].equals("car") ){
        for ( int j = 0; j < n && ++i < words.length; ++j )
           System.out.println( words[i] );
    }
}
基于正则表达式的不同解决方案:

final int n = 2;
final String s = "I like my car. My car is cool. It's an awesome car to drive.";
final String word = "car";
final String separatorRE = " ,.";
final Pattern p = Pattern.compile( String.format( "(?<=[%s]|^)%s(?=[%s]|$)", separatorRE, word, separatorRE ) );
final Pattern q = Pattern.compile( String.format( "(?<=[%s])[^%s]+(?=[%s]|$)", separatorRE, separatorRE, separatorRE ) );
final Matcher m = p.matcher(s);
while ( m.find() ){
    int i = 0;
    Matcher mw = q.matcher(s);
    mw.region( m.end(), s.length());
    while ( ++i <= n && mw.find() )
        System.out.println( mw.group() );
}

我犯了一个错误,在最内部的while循环中断之前没有更新i2。现在它工作正常了。另外,如果我们想添加更多分隔符,可以使用| |在同一语句中添加更多条件

String s="car is cool car is awesome.";
int index = contents.indexOf(s);
while(index >= 0) {
   String[] words = new String[n];
   for (int i3=0;i3<n;i3++){
       words[i3]="";
   }
   int i1=0, i2=index;
   while(true){
       if(i1==n) break;
       if(i2>=contents.length()) break;
       while(true) {
           if(i2>=contents.length()) break;
           if((contents.charAt(i2)+"").equals(" ")){i2++; break;}
           words[i1]+=(contents.charAt(i2)+"");
           i2++;
       }
       System.out.println(words[i1]);
       i1++;
   }
    index = contents.indexOf(s, index+1);
}

ifcontents.charAti2+=->除此之外,还有各种分隔符。例如。我该怎么做才能把它们也考虑进去呢?您可以使用这样一个正则表达式来指定多个分隔符,例如:.split |,| \。输出car is和stops-这是错误的;它的输出应该是很酷的,然后是很棒的。@MT0编辑了我的答案。在编写代码时犯了一个小错误。忘记将字符串的长度添加到索引中,它现在输出的最小值为n或给定单词后的最大字数。谢谢你指出。不会编译你需要的car.length-它也找不到car这个词的第二个实例,而且会在字符串上失败。胡萝卜很酷,car很棒。当它在胡萝卜中找到汽车时,需要修正第一行:String contents=汽车很酷,汽车很棒;字符串s=car;。同时,它输出car,然后是car,然后是car。
String s="car is cool car is awesome.";
int index = contents.indexOf(s);
while(index >= 0) {
   String[] words = new String[n];
   for (int i3=0;i3<n;i3++){
       words[i3]="";
   }
   int i1=0, i2=index;
   while(true){
       if(i1==n) break;
       if(i2>=contents.length()) break;
       while(true) {
           if(i2>=contents.length()) break;
           if((contents.charAt(i2)+"").equals(" ")){i2++; break;}
           words[i1]+=(contents.charAt(i2)+"");
           i2++;
       }
       System.out.println(words[i1]);
       i1++;
   }
    index = contents.indexOf(s, index+1);
}