Как разделить этот Xpath?

#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]/