+80
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
private static final char DELIM = '_';
public String createDocName() {
...
final String sDelim = Character.toString(DELIM);
String res = stringWithDelimiter(docType) + stringWithDelimiter(docNumber) + stringWithDelimiter(docDate) + stringWithDelimiter(documentReceiptDate);
res = res.length() < sDelim.length() ? "" : res.substring(0, res.length() - sDelim.length());
res = res.replace(sDelim + sDelim + sDelim, sDelim);
res = res.replace(sDelim + sDelim, sDelim);
if (res.charAt(0) == DELIM)
res = res.substring(1);
if (res.charAt(res.length() - 1) == DELIM)
res.substring(0, res.length() - sDelim.length());
return res;
}
private String stringWithDelimiter(Object o) {
final String sDelim = Character.toString(DELIM);
String s = (String) o;
return StringUtils.isNotEmpty(s) ? s + sDelim : sDelim;
}
метод createDocName должен из нескольких полей документа составить имя документа, используя в качестве разделителя "_".
Сначала я не мог предположить что делает этот код, но подсказал коллега по работе:
потензицально, вызов String res = stringWithDelimiter(docType) + stringWithDelimiter(docNumber) + stringWithDelimiter(docDate) + stringWithDelimiter(documentReceiptDate) ; может давать запись например такую: "docType___" - в случае если docNumber, docDate и documentReceiptDate будут пустыми строками (а можно получить и "___documentReceiptDate".
НО, предусмотрительный разработчик позаботился об это проблеме!
Он заменяет, "___" и "__" с помощью:
res = res.replace(sDelim + sDelim + sDelim, sDelim);
res = res.replace(sDelim + sDelim, sDelim);
Затем удаляет знаки подчеркиваний в начале и в конце строки:
if (res.charAt(0) == DELIM)
res = res.substring(1);
if (res.charAt(res.length() - 1) == DELIM)
res.substring(0, res.length() - sDelim.length());
Отличное решение, можно было бы конечно переписать метод stringWithDelimiter, чтобы он не дописывал "_" для пустых строк, но это ведь не так круто правда? Жаль только что придется этот класный код снова переписывать если вдруг измениться число параметров, или поменяется разделитель...
Запостил: LexeY4eg,
23 Ноября 2011
Комментарии (0) RSS
Добавить комментарий