如何规范化/抛光Java中的文本?

时间:2011-03-29 12:24:31

标签: java string

您建议使用什么方法来规范化Java中的文本,例如

String raw = "  This is\n  a test\n\r  ";
String txt = normalize(raw);
assert txt == "This is a test";

我正在考虑使用StringUtils .replace().strip()方法,但也许有一些更简单的方法。

7 个答案:

答案 0 :(得分:11)

如果只是空格

,请尝试以下操作
String txt = raw.replaceAll("\\s+", " ").trim();

答案 1 :(得分:2)

我看到你想要摆脱的字符串中有一个换行符。在这种情况下,我建议使用像这样的正则表达式...

Pattern.compile("\\s+").matcher(text).replaceAll(" ").trim();

您可以随时存储已编译的正则表达式以获得更好的性能。

答案 2 :(得分:1)

稍微取决于您想要剥离的内容。如果它的某些特定字符然后replaceAll()将由@Yaneeve发布。 如果需求更加通用,那么您可能需要查看normalize the string using the Normalizer

答案 3 :(得分:0)

删除您要查找的第一个和最后一个空格String#trim()

http://download.oracle.com/javase/1.4.2/docs/api/java/lang/String.html#trim()

答案 4 :(得分:0)

如果规范化意味着替换空格,制表符,换行符和换行符的序列,那么我会考虑使用一个简单的正则表达式和String.split()来创建单独的单词,然后将它们附加到一个StringBuilder中,并且间距为'介于两者之间。如果性能真的很重要,另一种方法是简单地遍历String的字符,查看每个字符并决定是将它附加到StringBuilder还是丢弃它。

答案 5 :(得分:0)

private static String normalize(String raw) {
    StringBuilder sb = new StringBuilder();
    Scanner scanner = new Scanner(raw);
    while (scanner.hasNext()) {
        sb.append(scanner.next());
        sb.append(' ');
    }
    sb.deleteCharAt(sb.length() - 1);
    return sb.toString();
}

答案 6 :(得分:0)

Apache commons最终添加了这个功能:org.apache.commons.lang3.StringUtils.normalizeSpace(String str) // docs