log4j 如何将String格式化为一行,StringUtils?

31moq8wy  于 2023-08-05  发布在  其他
关注(0)|答案(4)|浏览(93)

我有一个字符串,我传递给log4j,让它记录到一个文件中,该字符串的内容是XML,它被格式化为多行,并带有缩进等,以便于阅读。
但是,我希望XML都在一行上,我该怎么做呢?我看过StringUtils,我想我可以去掉制表符和回车符,但一定有更干净的方法吗?
谢啦,谢啦

xmd2e60i

xmd2e60i1#

我会抛出一个regexp替换它。这不是很高效,但肯定比XML解析快!
这是未经测试的:

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

字符串
如果我没有出错,这将消除所有行终止符以及紧跟在这些行终止符之后的任何空格。模式开头的空格应该消除各行中的任何尾随空格。trim()是为了消除第一行开始和最后一行结束处的空白而添加的。

am46iovg

am46iovg2#

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);
}

字符串

jgzswidk

jgzswidk3#

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();
}

字符串

sbdsn5lh

sbdsn5lh4#

@corsiKa的答案,但使用Java 8+可选。此外,我发现使用行分隔符系统属性不能作为String.split的正则表达式工作。

Optional.ofNullable(multilineString)
    .map(s -> s.split("[\\r\\n]+"))
    .stream()
    .flatMap(Arrays::stream)
    .map(String::trim)
    .reduce("", (accumulator, current) -> accumulator + current);

字符串

相关问题