たとえば、前の境界 'x' と後ろの境界 'y' があります。
EG 文字列 'abcxfoobaryblablah' を指定すると、'foobar' が返されます。
例のように、2 つの境界が文字列内で 1 回だけ出現すると仮定します。
ありがとう!正規表現を使用する必要はありませんが、それが最善の方法だと思います。
String s = "abcxfoobaryblablah";
s = s.substring(s.indexOf('x') + 1, s.indexOf('y'));
System.out.println(s);
外
foobar
Java の境界マッチャーをチェックしてくださいhttp://docs.oracle.com/javase/tutorial/essential/regex/bounds.html
確かに部分文字列を実行できますが、正規表現では可能です。
String str = "abcxfoobaryblablah";
str = str.replaceAll("^.*x|y.*$", "");
^.*x
の先頭から までの文字に一致String
しx
ます。からの末尾までy.*$
の文字に一致します。y
String
x
が の後にある場合、これは の後ろから の末尾までのy
文字だけを保持することに注意してください。が存在しない場合は、 の先頭からtoまでの文字が保持されます。との両方が正しい順序である場合にのみ動作させたい場合は、次のようにします。x
String
x
String
y
x
y
String str = "abcxfoobaryblablah";
str = str.replaceAll("^.*x(.*)y.*$", "$1");
これはグループを使用します。
長いコードかもしれませんが、単純なロジックです。
String str="abcxfoobaryblablah";
char array[]=str.toCharArray();
boolean flag=false;
String answer="";
for(int i=0;i<array.length;i++)
{
if(array[i]=='x'){
flag=true;
continue;
}
if(array[i]=='y') break;
if(flag)answer+=array[i];
}
System.out.println(answer);
String input = "abcxfoobaryblablah";
int startIndex = input.indexOf("x");
int endIndex = input.indexOf("y");
String output = input.substring(startIndex+1, endIndex);
System.out.println(output);
最も簡単な方法は次のとおりです。
String middle = str.replaceAll(".*x(.*)y.*", "$1");