У меня есть строка, как показано ниже
String s = "John21071989Bangalore";
Class Person {
String name;
Long dob;
String city;
....
}
У меня есть bean-компонент, разделенная строка и установлены значения Bean.
Person p = new Person();
p.setName(s.subString(0,4)); //John
p.setDob(Long.ParseLong(s.subString(4,12))); //2071989
p.setCity(s.subString(12,21));//Bangalore
Теперь моя проблема в том, что если подстрока endIndesx меньше длины, дающей ошибку. Я хочу получить значение dob как нулевую ошибку.
String s1 = "John2107 Bangalore";
Person p = new Person();
p.setName(s.subString(0,4)); //John
p.setDob(Long.ParseLong(s.subString(4,12))); //this should be null
p.setCity(s.subString(12,21));//Bangalore




String s = "John21071989Bangalore";
Pattern pattern = Pattern.compile("(?<name>[a-zA-Z]+)(?<dob>\\d*)\\s*(?<city>[a-zA-Z]+)");
Matcher m = pattern.matcher(s);
Person p = new Person();
if (m.find()) {
p.setName(m.group("name"));
String dob = m.group("dob");
if (dob != null && !dob.trim().isEmpty())
p.setDob(Long.valueOf(dob.trim()));
p.setCity(m.group("city"));
}
Для второго сценария у вас есть:
String s1 = "John2107 Bangalore";
Согласно этой инструкции:
p.setDob(Long.ParseLong(s.subString(4,12))); //this should be null
Вы пытаетесь преобразовать пробелы в число, поэтому возникнет исключение.
Вы можете проверить эту строку или заключить блок в try-catch:
Может быть, вам поможет что-то вроде этого:
Создайте метод под названием "parseDob":
public Long parseDob(String val) {
try {
return Long.ParseLong(val);
} catch (NumberFormatException e) {
return null;
}
}
Тогда вы можете оставить свой код:
Person p = new Person();
p.setName(s.subString(0,4)); //John
p.setDob(parseDob(s.subString(4,12)));
p.setCity(s.subString(12,21));//Bangalore
Есть два метода подстроки:
1. подстрока (int beginIndex)
2. подстрока (int beginIndex, int endIndex)
Второй - тот, который вы используете. По сути, он получает подстроку от beginIndex до endIndex.
Пример: «abcdefg» .substring (2,4); // возвращаем 'cd' c - начальный индекс и включен. Однако endIndex 4, который представляет 'e' в этом примере, не включен. Когда вы пытаетесь использовать этот метод для получения подстроки от начального индекса до конца строки, вам нужно ввести конечный индекс, превышающий длину строки, и это создает исключение. Это именно то, что вы делаете.
Вместо использования второго метода используйте первый. Он просто получает подстроку от данного индекса до конца String.
Пример: «abcdefg» .substring (2); // возвращает "cdefg"
В заключение ваш код должен выглядеть следующим образом:
Person p = new Person();
p.setName(s.subString(0,4)); //John
p.setDob(Long.ParseLong(s.subString(4,12))); //2071989
p.setCity(s.subString(12));//Bangalore
При чем тут длина? Ошибка из-за пробелов