Java 只收集第一个索引

Java 只收集第一个索引,java,arrays,Java,Arrays,所以我应该制作一个列表,其中包含文本中模式的每个非尾部出现之后的字符。存储在列表索引n处的字符必须是模式第n个非尾部出现之后的字符 例如:测试用例getCharsThatFollowPattern(“abcabdabcab”,“ab”)应该返回ArrayList['c','d','c'] public static ArrayList<Character> getCharsThatFollowPattern (String text, String pattern) { Ar

所以我应该制作一个列表,其中包含文本中模式的每个非尾部出现之后的字符。存储在列表索引n处的字符必须是模式第n个非尾部出现之后的字符

例如:测试用例getCharsThatFollowPattern(“abcabdabcab”,“ab”)应该返回ArrayList['c','d','c']

public static ArrayList<Character> getCharsThatFollowPattern (String text, String pattern) { 

  ArrayList<Character> character = new ArrayList<Character>(); 
  int i = 0; 

  while (i < text.length()) 
  { 
    if (i < text.length()) 
    { 
      character.add(text.charAt(text.indexOf(pattern, i))); 
      i = i + text.indexOf(pattern, i) + pattern.length(); 
    } 
  } 

  return character;
}
我在尝试让列表遍历模式文本时遇到问题。我在测试用例中得到['a','a','a'],而不是['c','d','c']

public static ArrayList<Character> getCharsThatFollowPattern (String text, String pattern) { 

  ArrayList<Character> character = new ArrayList<Character>(); 
  int i = 0; 

  while (i < text.length()) 
  { 
    if (i < text.length()) 
    { 
      character.add(text.charAt(text.indexOf(pattern, i))); 
      i = i + text.indexOf(pattern, i) + pattern.length(); 
    } 
  } 

  return character;
}
公共静态ArrayList getCharsThatFollowPattern(字符串文本,字符串模式){
ArrayList字符=新的ArrayList();
int i=0;
而(i

为什么它不重复(

您的目的是在较大的
文本
值中找到一个子字符串模式,然后将这些字符中的每一个添加到一个数组中。您的代码中有一些内容,因此我尝试创建一个最简单的示例来说明如何使其工作,但排除您已经熟悉的内容(如创建数组和填充值)

下面的代码查找下一个模式的开始位置—
indexOfNextPatternStart
——这就是下一个出现“ab”的位置。然后它将“ab”本身的长度相加,以获得其后的任何索引。因此,在您的
文本
示例中,它以
“abc”
—“ab”开始显然是在前面,但您需要
的索引“c”
。这就是
indexOfCharAfterPattern
包含的内容。此时,您已将字符隔离。在我的示例中,我将其临时存储为
charAfterPattern
,并将其打印出来

我添加了
if(indexOfCharAfterPattern
检查以防止
text
中的最后一个“ab”。最后一个“ab”之后没有任何内容,因此尝试向前看下一个字符是行不通的

public static void printThatFollowPattern(String text, String pattern) {
    int i = 0;
    while (i < text.length()) {
        int indexOfNextPatternStart = text.indexOf(pattern, i);
        int indexOfCharAfterPattern = indexOfNextPatternStart + pattern.length();

        if (indexOfCharAfterPattern < text.length()) {
            char charAfterPattern = text.charAt(indexOfCharAfterPattern);
            System.out.println("charAfterPattern: " + charAfterPattern);
        } else {
            break;
        }

        i = indexOfCharAfterPattern + 1;
    }
}
publicstaticvoidprintthafollowPattern(字符串文本,字符串模式){
int i=0;
而(i
所以你的代码试图在每次出现“ab”之后立即隔离每个字符?@kaan yes,然后将所有遵循该模式的隔离字符存储在一个数组中。很难找到简单的解释。计算
i
的逻辑似乎不正确。我添加了一个打印语句-
System.out.print(i+“”);
-并且得到:
2 7 18
@kaan有趣…有道理,
i
可能会导致问题。我认为它在所有迭代中都会返回字符“a”,因为索引只读取模式的第一个字符。我不确定如何让它停止只读取第一个字符,然后转到其他部分