我有一个字符串,我传递给log4j,让它记录到一个文件中,该字符串的内容是XML,它被格式化为多行,并带有缩进等,以便于阅读。但是,我希望XML都在一行上,我该怎么做呢?我看过StringUtils,我想我可以去掉制表符和回车符,但一定有更干净的方法吗?谢啦,谢啦
xmd2e60i1#
我会抛出一个regexp替换它。这不是很高效,但肯定比XML解析快!这是未经测试的:
String cleaned = original.replaceAll("\\s*[\\r\\n]+\\s*", "").trim();
字符串如果我没有出错,这将消除所有行终止符以及紧跟在这些行终止符之后的任何空格。模式开头的空格应该消除各行中的任何尾随空格。trim()是为了消除第一行开始和最后一行结束处的空白而添加的。
trim()
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); }
字符串
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(); }
sbdsn5lh4#
@corsiKa的答案,但使用Java 8+可选。此外,我发现使用行分隔符系统属性不能作为String.split的正则表达式工作。
String.split
Optional.ofNullable(multilineString) .map(s -> s.split("[\\r\\n]+")) .stream() .flatMap(Arrays::stream) .map(String::trim) .reduce("", (accumulator, current) -> accumulator + current);
4条答案
按热度按时间xmd2e60i1#
我会抛出一个regexp替换它。这不是很高效,但肯定比XML解析快!
这是未经测试的:
字符串
如果我没有出错,这将消除所有行终止符以及紧跟在这些行终止符之后的任何空格。模式开头的空格应该消除各行中的任何尾随空格。
trim()
是为了消除第一行开始和最后一行结束处的空白而添加的。am46iovg2#
JDom http://www.jdom.org/
字符串
jgzswidk3#
字符串
sbdsn5lh4#
@corsiKa的答案,但使用Java 8+可选。此外,我发现使用行分隔符系统属性不能作为
String.split
的正则表达式工作。字符串