Java の文字列から 3 文字の部分文字列をすべて見つけようとしています。
たとえば、文字列「example string」から、「exa」、「xam」、「amp」、「mpl」、「ple」、「str」、「tri」、「rin」、「ing」を取得する必要があります。
Java 正規表現 "([a-zA-Z]){3}" を使用してみましたが、"exa"、"mpl"、"str"、"ing" しか取得できませんでした。
誰かがこれを修正するための正規表現または方法を教えてもらえますか?
Juvanis のアイデアをいくらか実装し、反復して部分文字列を取得し、正規表現を使用して部分文字列がすべて文字であることを確認します。
String s = "example string";
for (int i = 0; i <= s.length() - 3; i++) {
String substr = s.substring(i, i + 3);
if (substr.matches("[a-zA-Z]+")) { System.out.println(substr); }
}
文字が 1 つの正規表現で消費されると、他の正規表現では使用できません。あなたの例では、aはexaで消費されるため、ampは出力としてリストされません。従来の反復アプローチを試す必要があります。実装する方が簡単です。
これは、次のように正規表現を使用して実行できます。
regex を使用して、文字列に一致するすべての位置を見つけます\w(?=\w\w)
。これにより、必要な各部分文字列の最初の文字の開始インデックスが得られます。
この場合、、0
、1
、2
、3
、4
、8
およびが得られます。9
10
11
各位置から始まり、そのプラス 2 までの部分文字列を取得して、必要なものを取得します。
この場合、開始インデックス パラメータは包括的であり、終了インデックス パラメータは排他的であるためmy_string.substring(0,3)
、などを意味します。my_string.substring(1,4)