Java: получение подстроки из строки в текстовом файле, начинающейся после специального слова - PullRequest
0 голосов
/ 09 января 2020

Я бы хотел извлечь из него имя и возраст из текстового файла. Может ли кто-нибудь оказать мне помощь?

Текстовое содержание:

fhsdgjfsdk;snfd fsd ;lknf;ksld sldkfj lk 
Name: Max Pain
Age: 99 Years
and they df;ml dk fdj,nbfdlkn ......

Код:

package myclass;

import java.io.*;

public class ReadFromFile2 {
    public static void main(String[] args)throws Exception {
        File file = new File("C:\\Users\\Ss\\Desktop\\s.txt");
        BufferedReader br = new BufferedReader(new FileReader(file));
        String st;
        while ((st = br.readLine()) != null)
            System.out.println(st.substring(st.lastIndexOf("Name:")));
            // System.out.println(st);
    }
}

Ответы [ 4 ]

0 голосов
/ 09 января 2020

Если они могут встречаться в одной строке, и вы хотите использовать шаблон, не совпадающий с ними, вы можете использовать группу захвата и жадный жетон закаленный .

\b(?:Name|Age):\h*((?:.(?!(?:Name|Age):))+)

Regex demo | Java демо

Например

final String regex = "\\b(?:Name|Age):\\h*((?:.(?!(?:Name|Age):))+)";
final String string = "fhsdgjfsdk;snfd fsd ;lknf;ksld sldkfj lk \n"
     + "Name: Max Pain\n"
     + "Age: 99 Years\n"
     + "and they df;ml dk fdj,nbfdlkn ......\n\n"
     + "fhsdgjfsdk;snfd fsd ;lknf;ksld sldkfj lk \n"
     + "Name: Max Pain Age: 99 Years\n"
     + "and they df;ml dk fdj,nbfdlkn ......";

final Pattern pattern = Pattern.compile(regex);
final Matcher matcher = pattern.matcher(string);

while (matcher.find()) {
    for (int i = 1; i <= matcher.groupCount(); i++) {
        System.out.println(matcher.group(i));
    }
}

Выход

Max Pain
99 Years
Max Pain
99 Years
0 голосов
/ 09 января 2020

пожалуйста, попробуйте ниже код.

public static void main(String[] args)throws Exception 
      { 
      File file = new File("/root/test.txt"); 

      BufferedReader br = new BufferedReader(new FileReader(file)); 

      String st; 
      while ((st = br.readLine()) != null) {

          if(st.lastIndexOf("Name:") >= 0 || st.lastIndexOf("Age:") >= 0) {
              System.out.println(st.substring(st.lastIndexOf(":")+1));
          }
      }
      }
0 голосов
/ 09 января 2020

Это сделает вашу работу:

public static void main(String[] args) {
    String str = "fhsdgjfsdk;snfd fsd ;lknf;ksld sldkfj lk Name: Max Pain Age: 99 Years and they df;ml dk fdj,nbfdlkn";
    String[] split = str.split("(\\b: \\b)"); 
    //\b represents an anchor like caret 
    // (it is similar to $ and ^) 
    // matching positions where one side is a word character (like \w) and 
    // the other side is not a word character 
    // (for instance it may be the beginning of the string or a space character).
    System.out.println(split[1].replace("Age",""));
    System.out.println(split[2].replaceAll("\\D+",""));  
    //remove everything except Integer ,i.e. Age
}

Вывод:

Max Pain 
99
0 голосов
/ 09 января 2020

Вы можете использовать метод replace из класса string, так как String является неизменным и собирается создавать новую строку для каждой модификации.

while ((st = br.readLine()) != null) 
      if(st.startsWith("Name:")) {
          String name = st.replace("Name:", "").trim();
          st = br.readLine();
          String age="";
          if(st!= null && st.startsWith("Age:")) {
             age = st.replace("Age:", "").trim();
          }
          // now you should have the name and the age in those variables
      }

  } 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...