あなたの問題に対する美しくエレガントな解決策がすでにいくつかあります(ボヘミアンで好奇心旺盛です)。それでも、最初に述べたように、正規表現を使用できない場合は、代替手段があります。このコードは特に洗練されたものではありません。指摘されているように、それを行うためのより良い方法がありますが、問題の解決策の背後にあるロジックを少なくとも明確に示す必要があります。
開始文字列と 3 つの終了文字列のうちの 1 つとの間の可能な限り長い部分文字列をどのように見つけますか?
最初に、開始文字列のインデックスを見つけ、次に各終了文字列のインデックスを見つけ、各終了の部分文字列を取得してから、それらの長さを取得します。string が見つからない場合、そのインデックスは -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 です。