Вы можете сделать это:
String str = "123dance456";
String substr = "dance";
String before = str.substring(0, str.indexOf(substr));
String after = str.substring(str.indexOf(substr) + substr.length());
Или
String str = "123dance456";
String substr = "dance";
String[] parts = str.split(substr);
String before = parts[0];
String after = parts[1];
Примечательно, что второй ответ не сработает, если у нас более одного вхождения подстроки.С этой целью, если мы хотим, чтобы только первый распознавался, было бы безопаснее вызвать split с пределом:
String[] parts = str.split(substr, 2);
, который гарантирует, что возвращаемый массив имеет не более двух элементов.Кроме того, поскольку split
будет интерпретировать его входные данные как регулярное выражение, мы должны опасаться неверного синтаксиса регулярного выражения.Поэтому я предпочел бы первое решение, так как оно работает независимо от состава исходной подстроки.
Чтобы сделать первый ответ более эффективным - так как это мой предпочтительный ответ - тогда мы бынужно запомнить положение подстроки:
final int position = str.indexOf(substr);
if (position >= 0) {
//if the substring does occur within the string, set the values accordingly
before = str.substring(0, position);
after = str.substring(position + substr.length());
} else {
//otherwise, default to the empty string (or some other value)
before = "";
after = "";
}
Всегда стоит обратить внимание на эти маленькие крайние случаи.