您的问题已经有一些漂亮而优雅的解决方案(波西米亚和好奇)。如果您仍然 - 如最初所述 - 不能使用正则表达式,这里有一个替代方案。这段代码不是特别优雅,正如所指出的,有更好的方法来做到这一点,但它至少应该清楚地向您展示解决问题背后的逻辑。
如何在起始字符串和三个结束字符串之一之间找到可能的最长子字符串?
首先,找到起始字符串的索引,然后找到每个结束字符串的索引,并获取每个结尾的子字符串,然后是它们的长度。请记住,如果未找到字符串,则其索引将为 -1。
String originalString = "SDAFKJDAFKATGDFSDFAKJDNKSJFNSDTGASDFKJSDNKFJSNDJFATGDSDFKJNSDFTAGSDFSDATGFF";
String STARTING_STRING = "ATG";
String END1 = "TAG";
String END2 = "TAA";
String END3 = "TGA";
//let's find the index of STARTING_STRING
int posOfStartingString = originalString.indexOf(STARTING_STRING);
//if found
if (posOfStartingString != -1) {
int tagPos[] = new int[3];
//let's find the index of each ending strings in the original string
tagPos[0] = originalString.indexOf(END1, posOfStartingString+3);
tagPos[1] = originalString.indexOf(END2, posOfStartingString+3);
tagPos[2] = originalString.indexOf(END3, posOfStartingString+3);
int lengths[] = new int[3];
//we can now use the following methods:
//public String substring(int beginIndex, int endIndex)
//where beginIndex is our posOfStartingString
//and endIndex is position of each ending string (if found)
//
//and finally, String.length() to get the length of each substring
if (tagPos[0] != -1) {
lengths[0] = originalString.substring(posOfStartingString, tagPos[0]).length();
}
if (tagPos[1] != -1) {
lengths[1] = originalString.substring(posOfStartingString, tagPos[1]).length();
}
if (tagPos[2] != -1) {
lengths[2] = originalString.substring(posOfStartingString, tagPos[2]).length();
}
} else {
//no starting string in original string
}
lengths[] 表现在包含以 STARTING_STRING 开头的字符串长度和 3 个各自的结尾。然后只需找出哪个最长,您就会得到答案。
我还需要找到最大子字符串开始的原始字符串的索引。
这将是起始字符串开始的索引,在本例中为 10。