Как отформатировать строку в одну строку, StringUtils? - PullRequest
4 голосов
/ 16 июля 2010

У меня есть строка, которую я передаю в log4j, чтобы она записывалась в файл, содержимое этой строки - XML, и она отформатирована так, чтобы быть в нескольких строках с отступами и т. Д., Чтобы ее было легкочитать.

Однако я бы хотел, чтобы все XML были в одной строке, как я могу это сделать?Я взглянул на StringUtils, наверное, я мог бы убрать вкладки и возврат каретки, но должен быть более чистый способ?

Спасибо

Ответы [ 3 ]

5 голосов
/ 16 июля 2010

Я бы заменил регулярное выражение вместо него.Это не очень эффективно, но наверняка будет быстрее, чем синтаксический анализ XML!

Это не проверено:

 String cleaned = original.replaceAll("\\s*[\\r\\n]+\\s*", "").trim();

Если я не лоханусь, это исключит все разделители строк, а также любые пробелысразу после этих разделителей строки.Пробелы в начале шаблона должны уничтожать любые пробелы в отдельных строках.trim() добавляется в качестве хорошей меры для устранения пробелов в начале первой строки и в конце последней.

1 голос
/ 16 июля 2010

Возможно с JDom http://www.jdom.org/

public static Document createFromString(final String xml) {
    try {
        return new SAXBuilder().build(new ByteArrayInputStream(xml.getBytes("UTF-8")));
    } catch (JDOMException e) {
        throw new RuntimeException(e);
    } catch (IOException e) {
        throw new RuntimeException(e);
    }
}

public static String renderRaw(final Document description) {
    return renderDocument(description, getRawFormat());
}

public static String renderDocument(final Document description, final Format format) {
    return new XMLOutputter(format).outputString(description);
}
0 голосов
/ 16 июля 2010
String oneline(String multiline) {
    String[] lines = multiline.split(System.getProperty("line.separator"));
    StringBuilder builder = new StringBuilder();
    builder.ensureCapacity(multiline.length()); // prevent resizing
    for(String line : lines) builder.append(line);
    return builder.toString();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...