public static String normalizeFilename(String rawName) { StringBuilder builder = new StringBuilder(rawName.length()); StringCharacterIterator iterator = new StringCharacterIterator(rawName); while (iterator.hasNext()) { char c = iterator.next(); if (Character.isLetterOrDigit(c) || c=='.' || c == '-'|| c == '*' || c == '_' || c == '+' || c == ' ') builder.append(c); else if (c == '@') builder.append("a"); else if (c == '$') builder.append("s"); // all other characters are ignored } return builder.toString().trim(); }
private static String getEncoding(byte[] bytes) throws UnsupportedEncodingException { String tmp = new String(bytes, Encodings.ISO_8859_1); int startIndex = tmp.indexOf("charset="); if (startIndex < 0) return null; startIndex += "charset=".length(); StringCharacterIterator it = new StringCharacterIterator(tmp, startIndex); it.skipWhitespace(); StringBuilder builder = new StringBuilder(); int c; while ((c = it.next()) != -1 && ParseUtil.isNMAfterStartChar((char) c)) builder.append((char) c); return builder.toString(); }
private static Long parseNonNegativeIntegerPart(StringCharacterIterator iterator, boolean leadingZeros) { Long n = null; int c = '0'; int digitCount = 0; while (iterator.hasNext() && Character.isDigit(c = iterator.next())) { digitCount++; if (n == null) n = 0L; int d = (c - '0'); if (!leadingZeros && digitCount == 2 && n == 0) return null; // n = n * 10 + d; c = -1; } if (c != -1) iterator.pushBack(); return n; }
public static String normalizeLineSeparators(String text, String lineSeparator) { if (StringUtil.isEmpty(text)) return text; StringBuilder builder = new StringBuilder(); StringCharacterIterator iterator = new StringCharacterIterator(text); while (iterator.hasNext()) { char c = iterator.next(); if (c != '\r' && c != '\n') builder.append(c); else { // swallow the \n part of of \r\n if (c == '\r' && iterator.hasNext()) { char c2 = iterator.next(); if (c2 != '\n') // oops, it was only a \r iterator.pushBack(); } builder.append(lineSeparator); } } return builder.toString(); }
private static Double parseFraction(StringCharacterIterator iterator) { Double p = null; Double base = 0.1; while (iterator.hasNext()) { char c = iterator.next(); if (c >= '0' && c <= '9') { if (p == null) p = 0.; p += base * (c - '0'); } else { iterator.pushBack(); return p; } base /= 10; } return p; }
int prevType = NONE; while (iterator.hasNext()) { char c = iterator.next(); int type; if (Character.isWhitespace(c))
public void assertNext(char c) { if (!hasNext()) throw new ParseException("Expected '" + c + "', but no more character is available", source, line, column); char next = next(); if (next != c) throw new ParseException("Expected '" + c + "', but found '" + next + "'", source, line, column); }
char c = iterator.next(); if (c == '-') { Object number = parseNonNegativeNumber(iterator, true, false);
if (hours == null || !iterator.hasNext() || iterator.next() != ':') return null; Long minutes = parseNonNegativeIntegerPart(iterator, true); return TimeUtil.time(hours.intValue(), minutes.intValue(), 0, 0); if (iterator.next() != ':') return null; Long seconds = parseNonNegativeIntegerPart(iterator, true); return TimeUtil.time(hours.intValue(), minutes.intValue(), seconds.intValue(), 0); if (iterator.next() != '.') return null; Double f = parseFraction(iterator);
private static Object parseDate(String trimmed) { StringCharacterIterator iterator = new StringCharacterIterator(trimmed); // parse day Long year = parseNonNegativeIntegerPart(iterator, true); if (year == null || !iterator.hasNext() || iterator.next() != '-') return null; if (!iterator.hasNext()) return null; Long month = parseNonNegativeIntegerPart(iterator, true); if (month == null || !iterator.hasNext() || iterator.next() != '-') return null; if (!iterator.hasNext()) return null; month = month - 1; Long day = parseNonNegativeIntegerPart(iterator, true); if (day == null || day == 0) return null; Date baseDate = TimeUtil.date(year.intValue(), month.intValue(), day.intValue()); if (!iterator.hasNext()) return baseDate; if (iterator.next() != 'T') return null; if (!iterator.hasNext()) return null; Object time = parseTime(iterator.remainingText()); return (time != null && time instanceof Time ? TimeUtil.add(baseDate, (Time) time) : null); }