トリプル文字を使用して入力文字列に対して正規表現を実行する必要があるという独自の問題ステートメントがあります。たとえば、入力が の場合、入力を として扱い、正規表現パターンをこれらの 3 文字と比較する必要がある ABCDEFGHI
ため、 のパターン検索はBCD
false を返す必要があります。ABC+DEF+GHI
同様に、トリプレットの 1 つに一致する正規表現パターンDEF
が返されます。true
この問題ステートメントを使用して、入力が でQWEABCPOIUYTREWXYZASDFGHJKLABCMNBVCXZASXYZFGH
あり、トリプレットで始まり でABC
終わるすべての出力文字列を取得しようとしていると仮定しXYZ
ます。ABCPOIUYTREWXYZ
したがって、上記の入力では、出力は と の 2 つの文字列になるはずABCMNBVCXZASXYZ
です。
また、これらの文字列を ArrayList に格納する必要があります。以下は私の機能です:
public static void newFindMatches (String text, String startRegex, String endRegex, List<String> output) {
int startPos = 0;
int endPos = 0;
int i = 0;
// Making sure that substrings are always valid
while ( i < text.length()-2) {
// Substring for comparing triplets
String subText = text.substring(i, i+3);
Pattern startP = Pattern.compile(startRegex);
Pattern endP = Pattern.compile(endRegex);
Matcher startM = startP.matcher(subText);
if (startM.find()) {
// If a match is found, set the start position
startPos = i;
for (int j = i; j < text.length()-2; j+=3) {
String subText2 = text.substring(j, j+3);
Matcher endM = endP.matcher(subText2);
if (endM.find()) {
// If match for end pattern is found, set the end position
endPos = j+3;
// Add the string between start and end positions to ArrayList
output.add(text.substring(startPos, endPos));
i = j;
}
}
}
i = i+3;
}
}
この関数を main で実行すると、次のようになります。
String input = "QWEABCPOIUYTREWXYZASDFGHJKLABCMNBVCXZASXYZFGH";
String start = "ABC";
String end = "XYZ";
List<String> results = new ArrayList<String> ();
newFindMatches(input, start, end, results);
for (int x = 0; x < results.size(); x++) {
System.out.println("Output String number "+(x+1)+" is: "+results.get(x));
}
次の出力が得られます。
Output String number 1 is: ABCPOIUYTREWXYZ
Output String number 2 is: ABCPOIUYTREWXYZASDFGHJKLABCMNBVCXZASXYZ
最初の文字列が正しいことに注意してください。ただし、2 番目の文字列については、プログラムは再び入力文字列の先頭から読み取ります。代わりに、プログラムが最後の終了パターンの後に読み取るようにします (つまり、最初の検索と ASDFGHJKL などの不要な文字をスキップし、次のように 2 番目の文字列のみを出力する必要があります: ABCMNBVCXZASXYZ
ご回答ありがとうございます