Есть вот такой кусок кода, который читает из файла строки и парсит в регулярном выражении в int. Проблема в том, что регулярное выражение пропускает пять int, а надо строго четыре.
List<Integer> integers = new ArrayList<Integer>();
//Reading key in the string
line2 = line2;
Pattern pattern = Pattern.compile("\\d+\\S?\\d*\\d+\\S?\\d");
Matcher matcher = pattern.matcher(line2);
while (matcher.find() ) {
String s = matcher.group(0);
if (s.replaceAll("\\D", " ").length() == s.length()) {
integers.add(Integer.parseInt(s));
};
Так как вы не указали диалект регулярных выражений, вот вам POSIX ERE, достающее четвертое число:
^[^[:digit:]]*([[:digit:]]+[^[:digit:]]+){3}([[:digit:]]+).*$
Пропуск нечисел, три последовательночти число-нечисло (группа 1), число (группа 2), и пропуск всего остального до конца строки. Ваше четвёртое число в группе 2.
Из комментариев стало понятно, что вам нужна четвёртая цифра. Это делается так:
[^[:digit:]]*[[:digit:]]{3}([[:digit:]])
Ваша четвёртая цифра в группе 1.