Строка ввода:
String sentence = "I am an Administrator of my building";
Желаемая выходная строка = "I am an Administrator"
Шаблон для извлечения подстроки: получить подстроку, начиная с начала строки «sentence
» и до конца слова «Administrator
».
Я мог бы получить endIndex
«Администратора», а затем использовать substring(int beginIndex, int endIndex)
Не уверен, что это самый эффективный способ сделать это. Какой будет эффективный или короткий способ добиться этого?
Регулярное выражение на помощь:
String start = sentence.replaceAll("(?<=Administrator).*", "");
Это работает, сопоставляя все после Administrator
и заменяя его ничем (фактически «удаляя» его).
Ключевой частью регулярного выражения является вид позади (?<=Administrator)
, который соответствует сразу после Administrator
— между r
и пробелом.
использовать метод подстроки бывший Строка s = "привет"
s.substring(0,2)
выход = он в вашем примере это будет
sentence.substring(0,21)
Ваш ответ может быть улучшен с помощью дополнительной вспомогательной информации. Пожалуйста, отредактируйте , чтобы добавить дополнительные сведения, такие как цитаты или документация, чтобы другие могли подтвердить правильность вашего ответа. Вы можете найти больше информации о том, как писать хорошие ответы в справочном центре.
indexOf
то что нужно. Пытаться:
sentence.substring(0, sentence.indexOf(“Administrator”) + ”Administrator”.length())
(Кроме "
вместо умных кавычек)
Вы можете использовать String#indexOf(str:String):int
различными способами, чтобы эффективно захватывать части строки.
public class StringUtils {
public static final String sentence = "I am an Administrator of my building";
public static final String term = "Administrator";
public static void main(String[] args) {
// "I am an Administrator"
System.out.println(headStringInclusive(sentence, term));
// "Administrator of my building"
System.out.println(tailStringInclusive(sentence, term));
// "I am an "
System.out.println(headStringExclusive(sentence, term));
// " of my building"
System.out.println(tailStringExclusive(sentence, term));
}
public static String headStringInclusive(String str, String term) {
int index = str.indexOf(term);
return index != -1 ? str.substring(0, index + term.length()) : str;
}
public static String tailStringInclusive(String str, String term) {
int index = str.lastIndexOf(term);
return index != -1 ? str.substring(index) : str;
}
public static String headStringExclusive(String str, String term) {
int index = str.indexOf(term);
return index != -1 ? str.substring(0, index) : str;
}
public static String tailStringExclusive(String str, String term) {
int index = str.lastIndexOf(term);
return index != -1 ? str.substring(index + term.length()) : str;
}
}
Я бы написал метод, чтобы взять предложение и его замену. Следующее также сохраняет знаки препинания в конце предложения.
String[][] sentences = {
{"I am an Administrator of my building.", "Administrator"},
{"I am a teacher of math students.", "teacher"},
{"I am a parent of two children!!", "parent"}};
for(String[] info : sentences) {
String result = trimAfterWord(info[0], info[1]);
System.out.println(result);
}
отпечатки
I am an Administrator.
I am a teacher.
I am a parent!!
(?i)
- сделать соответствие слова независимо от регистра. Существующий регистр слова будет сохранен в результате.(.*?)
- сделайте неохотное совпадение, чтобы обеспечить захват всех знаков препинания, если они существуют.$
- сохраняйте знаки препинания только в конце предложения.$1$2
- обратные ссылки на захваченные word
и Punct
public static String trimAfterWord(String sentence, String word) {
return sentence.replaceFirst("(?i)("+word+").*?(\\p{Punct}*)$", "$1$2");
}
Для получения дополнительной полезной информации о регулярных выражениях и сопоставлении шаблонов ознакомьтесь с Pattern.
Это не очень полезно, потому что вы не объясняете, как выбрать
21
- если вы собираетесь иметь жестко закодированное значение, вы можете просто жестко закодировать"I am an Administrator"
, потому что, по крайней мере, вы можете легко увидеть, что это означает. Вы должны объяснить, как выбрать 21 во время выполнения.