Java 只收集第一个索引
所以我应该制作一个列表,其中包含文本中模式的每个非尾部出现之后的字符。存储在列表索引n处的字符必须是模式第n个非尾部出现之后的字符 例如:测试用例getCharsThatFollowPattern(“abcabdabcab”,“ab”)应该返回ArrayList['c','d','c']Java 只收集第一个索引,java,arrays,Java,Arrays,所以我应该制作一个列表,其中包含文本中模式的每个非尾部出现之后的字符。存储在列表索引n处的字符必须是模式第n个非尾部出现之后的字符 例如:测试用例getCharsThatFollowPattern(“abcabdabcab”,“ab”)应该返回ArrayList['c','d','c'] public static ArrayList<Character> getCharsThatFollowPattern (String text, String pattern) { Ar
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”,因为索引只读取模式的第一个字符。我不确定如何让它停止只读取第一个字符,然后转到其他部分