Чтение формата строки и выборка нерегулярных данных - PullRequest
0 голосов
/ 02 ноября 2018

У меня есть такой формат строки, который выводит

readAllBytes(new String(Files.readAllBytes(Paths.get(data))

из файла

a+2  b+3 c+33 d+88 ......

Мой сценарий - я хочу получить данные после c+" ". Положение c не является постоянным, но c встречается только один раз. Это может произойти где угодно. Мое требуемое значение всегда будет после c+ только. Требуемый размер значения 33 ..... также не является постоянным. Может кто-нибудь помочь мне с оптимальным кодом, пожалуйста? Я думаю, что здесь нужно использовать коллекции.

Ответы [ 2 ]

0 голосов
/ 02 ноября 2018

Этот код извлекает значение сразу после c+ до следующего пробела или до конца строки, если пробела нет:

String str = "a+2  b+3 c+33 d+88 ";
String find = "c+";

int index = str.indexOf(" ", str.indexOf(find) + 2);
if (index == -1)
    index = str.length();
String result = str.substring(str.indexOf(find) + 2, index);
System.out.println(result);

отпечатки

33

или в методе:

public static String getValue(String str, String find) {
    int index = str.indexOf(find) + 2; 
    int indexSpace = str.indexOf(" ", index);
    if (indexSpace == -1)
        indexSpace = str.length();
    return str.substring(index, indexSpace);
}

public static void main(String[] args) {
    String str = "a+2  b+3 c+33 d+88 ";
    String find = "c+";

    System.out.println(getValue(str, find));
}
0 голосов
/ 02 ноября 2018

Вы можете использовать это регулярное выражение, которое позволит вам захватывать нужные данные,

c\+(\d+)

Пояснение:

c + соответствует буквальному символу c, за которым сразу следует + char (\ d +) фиксирует следующую цифру (ы), которую вы хотите захватить.

Демо, https://regex101.com/r/jfYUPG/1

Вот код Java для демонстрации того же,

public static void main(String args[]) {
    String s = "a+2 b+3 c+33 d+88 ";
    Pattern p = Pattern.compile("c\\+(\\d+)");
    Matcher m = p.matcher(s);
    if (m.find()) {
        System.out.println("Data: " + m.group(1));
    } else {
        System.out.println("Input data doesn't match the regex");
    }
}

Это дает следующий вывод,

Data: 33
...