Как я могу разделить строку

#java #string #split

#Ява #строка #расщеплять

Вопрос:

У меня есть файл .txt, который я просматриваю в буфере чтения, и мне нужно извлечь последний символ из этой строки, я оставляю строку ниже

 lt;path  action="m"  text-mod="true"  mods="true"  kind="file"gt;branches/RO/2021Align01/CO/DGSIG-DAO/src/main/java/eu/ca/co/vo/CsoorspeWsVo.javalt;/pathgt;  

У меня есть следующий код, который занимает всю мою строку и помещает ее в список, но мне это просто нужно Cs00rspeWsVo

 while ((line = bufferdReader.readLine()) != null) {  Excel4 excel4 = new Excel4();  if (line.contains("lt;/pathgt;")) {  int index1 = line.indexOf("gt;");  int index2 = line.lastIndexOf("lt;");  line = line.substring(index1, index2);  excel4.setName(line);  listExcel4.add(excel4);  } }  

и я только хочу извлечь Cs00rspeWsVo отсюда. кто-нибудь может мне помочь? Спасибо

Комментарии:

1. Отправленный вами код не компилируется, в index2 строке отсутствует полулокон. Пожалуйста, не забудьте опубликовать правильный код и дважды проверьте, нет ли других проблем.

2. Конкретная проблема в вашем коде здесь заключается в том, что вы объявляете int index1 внутри области if блока, но затем пытаетесь ссылаться на него за пределами if. Тем не менее, использование XML-данных, подобных этому, не обязательно является лучшим подходом: проанализируйте их должным образом, чтобы извлечь данные.

3. То, что вы делаете, довольно банально, но, честно говоря, если вы уже используете этот подход, почему бы просто не поискать предпоследний индекс / , а затем извлечь его оттуда. Итак , подстрока от предпоследней / до последней lt; , тогда она у вас есть. int lastSlash = text.lastIndexOf("/") , тогда int secondToLastSlash = text.lastIndexOf("/", lastSlash) , тогда с вашим существованием index2 и у вас есть text.substring(secondToLastSlash, index2) . Или просто работаешь со своим текущим line line.substring(line.lastIndexOf("/")) .

4. Я бы предложил либо подстроку от последнего » / » до последнего «c», либо использовать регулярное выражение.

5. Вы также можете интерпретировать путь как Path , а затем использовать его методы высокого уровня. Так что что-то похожее Path.of(line).getFileName() или похожее.

Ответ №1:

Вы можете использовать группы регулярных выражений, чтобы получить его, например

 public static void main(String []args){  String input = "lt;pathn"    " action="m"n"    " text-mod="true"n"    " mods="true"n"    " kind="file"gt;branches/RO/2021Align01/CO/DGSIG-DAO/src/main/java/eu/ca/co/vo/CsoorspeWsVo.javalt;/pathgt;n";  Pattern pattern = Pattern.compile("kind="file"gt;. /(. \.. )lt;/pathgt;");  Matcher matcher = pattern.matcher(input);  if (matcher.find()) {  String fileName = matcher.group(1);  System.out.println(fileName);  } }  

Результат будет -gt; CsoorspeWsVo.java

и если вы хотите, чтобы путь заполнения изменил регулярное выражение на

 Pattern pattern = Pattern.compile("kind="file"gt;(. )lt;/pathgt;");  

Результатом будет:

branches/RO/2021Align01/CO/DGSIG-DAO/src/main/java/eu/ca/co/vo/CsoorspeWsVo.java

И вы можете получить имя и расширение в двух группах, например

 Pattern pattern = Pattern.compile("kind="file"gt;. /(. )\.(. )lt;/pathgt;");  

И внутри, если

 String fileName = matcher.group(1); String fileExtension = matcher.group(2);