1

我想为我的程序建立索引,最重要的步骤之一是规范化文本。例如,我需要将“[(Mac Pro @apple)]”转换为“macproapple”,在其中过滤空格、标点符号([()]) 和特殊字符(@)。我的代码是这样的:

StringBuilder sb = new StringBuilder(text);
sb = filterPunctuations(sb);
sb = filterSpecialChars(sb);
sb = filterBlankSpace(sb);
sb = toLower(sb);

因为这会生成很多String对象,所以我决定使用StringBuilder。但我不知道如何使用 StringBuffer 来做到这一点。有没有人有一些建议?我还需要处理汉字。

4

2 回答 2

2

您可以将 replaceAllapi 与正则表达式一起使用

String originalText = "[(Mac Pro @apple)]";
String removedString = originalText.replaceAll("[^\\p{L}\\p{N}]", "").toLowerCase();

内部replaceAll方法使用 StringBuffer,因此您不必担心在内存中创建的多个对象。

这是课堂上replaceAll的代码Matcher

 public String replaceAll(String replacement) {
        reset();
        boolean result = find();
        if (result) {
            StringBuffer sb = new StringBuffer();
            do {
                appendReplacement(sb, replacement);
                result = find();
            } while (result);
            appendTail(sb);
            return sb.toString();
        }
        return text.toString();
    }
于 2012-04-24T06:08:41.140 回答
1

试试这个-

class Solution
{
        public static void main (String[] args)
        {
                String s = "[(Mac Pro @apple)]";
                s = s.replaceAll("[^A-Za-z]", "");
                System.out.println(s);
        }
}

这给出了输出

MacProapple

以上几行的一个小解释是 -

s.replaceAll("[^A-Za-z]", "")删除 AZ 和 az 中不是(由 ^ 表示)的字符串中的所有内容。此处解释了 Java 中的正则表达式。

如果要将字符串最后转换为小写,则需要使用s.toLowerCase().

于 2012-04-24T05:59:46.397 回答