Можно ли настроить Dozer так, чтобы он не отображал свойства класса, которые находятся в конкретном пакете?

Я бы не советовал регулярный запрос от Барта, я нашел решение для синтаксического анализа лучше в этом конкретном случае (как предложил Фабиан). Я пробовал решение regex и собственную реализацию синтаксического анализа. Я обнаружил, что:

  1. Парсинг намного быстрее, чем расщепление с регулярным выражением с обратными ссылками - в 20 раз быстрее для коротких строк, ~ 40 раз быстрее в течение длительного времени strings.
  2. Regex не может найти пустую строку после последней запятой. Это было не в оригинальном вопросе, хотя это было моим требованием.

Мое решение и тест ниже.

String tested = "foo,bar,c;qual=\"baz,blurb\",d;junk=\"quux,syzygy\",";
long start = System.nanoTime();
String[] tokens = tested.split(",(?=([^\"]*\"[^\"]*\")*[^\"]*$)");
long timeWithSplitting = System.nanoTime() - start;

start = System.nanoTime(); 
List<String> tokensList = new ArrayList<String>();
boolean inQuotes = false;
StringBuilder b = new StringBuilder();
for (char c : tested.toCharArray()) {
    switch (c) {
    case ',':
        if (inQuotes) {
            b.append(c);
        } else {
            tokensList.add(b.toString());
            b = new StringBuilder();
        }
        break;
    case '\"':
        inQuotes = !inQuotes;
    default:
        b.append(c);
    break;
    }
}
tokensList.add(b.toString());
long timeWithParsing = System.nanoTime() - start;

System.out.println(Arrays.toString(tokens));
System.out.println(tokensList.toString());
System.out.printf("Time with splitting:\t%10d\n",timeWithSplitting);
System.out.printf("Time with parsing:\t%10d\n",timeWithParsing);

Конечно, вы можете изменить переключатель на другое -в этом фрагменте, если вы чувствуете себя некомфортно с его уродством. Обратите внимание, что после переключения с разделителем отсутствует перерыв. StringBuilder был выбран вместо StringBuffer по дизайну, чтобы увеличить скорость, когда безопасность потоков не имеет значения.

0
задан Voland Mortes 16 January 2019 в 13:39
поделиться