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

时间:2010-07-16 15:15:28

标签: java xml string log4j

我有一个字符串,我正在传递给log4j以将其记录到文件中,该字符串的内容是XML,并且它被格式化为带有缩进的多行等等,以便于读取。

但是,我希望XML能够在一条线上,我该怎么办呢?我看过StringUtils,我想我可以去除标签和回车,但是必须有一个更干净的方式吗?

由于

3 个答案:

答案 0 :(得分:5)

我会在它上面添加一个regexp替换。这不是高效的,但肯定比XML解析更快!

这是未经测试的:

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

如果我没有傻逼,那将消除所有行终止符以及紧跟在那些行终止符之后的任何空格。模式开头的空格应该杀死单个行上的任何尾随空格。 trim()用于消除第一行开头和最后一行结束时的空格。

答案 1 :(得分:1)

也许使用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);
}

答案 2 :(得分:0)

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