#java #string
#java #строка
Вопрос:
givenString = "/DATA[1]/ASSET[1]/DET[5]/INT[1]/VAL[1]/text()[1]"
findString = "DET"
Ожидаемый результат: «/DATA[1]/ASSET [1]/ DET [5] /»
Я должен найти строку «DET» и другие символы, пока не дойду до первого «/»
Ответ №1:
Предполагая, что DET
это появится только один раз, вы могли бы использовать здесь замену регулярных выражений:
String givenString = "/DATA[1]/ASSET[1]/DET[5]/INT[1]/VAL[1]/text()[1]";
String findString = "DET";
String output = givenString.replaceAll("(.*/" findString "[^/]*/).*", "$1");
System.out.println(output);
Это печатает:
/DATA[1]/ASSET[1]/DET[5]/
Идея здесь в том, чтобы сопоставить всю строку со следующим шаблоном регулярных выражений:
^(.*/DET[^/]*/).*$
Затем мы заменяем только первую группу захвата $1
, которая должна содержать нужный вам путь.
Ответ №2:
Альтернативный подход без использования регулярных выражений был бы следующим :
public static void main(String[] args) {
String givenString = "/DATA[1]/ASSET[1]/DET[5]/INT[1]/VAL[1]/text()[1]" ;
String findString = "DET";
List<String> stringList = Arrays.asList(givenString.split("/"));
StringBuilder expectedOutput = new StringBuilder();
Iterator itr = stringList.iterator();
while (itr.hasNext()){
String temp = (String) itr.next();
expectedOutput.append(temp "/");
if(temp.startsWith("DET"))
break;
}
System.out.println(expectedOutput.toString());
}
//Output
/DATA[1]/ASSET[1]/DET[5]/