java:如何规范化文本?

java:如何规范化文本?,java,Java,我想为我的程序建立索引,其中最重要的一步是规范化文本。 e、 g.我需要将“[(Mac-Pro@apple)]”转换为“Mac-proapple”,在其中过滤空格、标点符号([()])和特殊字符(@)。我的代码如下: StringBuilder sb = new StringBuilder(text); sb = filterPunctuations(sb); sb = filterSpecialChars(sb); sb = filterBlankSpace(sb); sb = toLower

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

StringBuilder sb = new StringBuilder(text);
sb = filterPunctuations(sb);
sb = filterSpecialChars(sb);
sb = filterBlankSpace(sb);
sb = toLower(sb);
因为这将生成许多字符串对象,所以我决定使用StringBuilder。但我不知道如何使用StringBuffer。有人有什么建议吗?我还需要处理汉字

试试这个-

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]”,“)
删除字符串中不在A-z和A-z中(由^表示)的所有内容。解释了Java中的正则表达式


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

可以使用带正则表达式的
replaceAll
api

String originalText = "[(Mac Pro @apple)]";
String removedString = originalText.replaceAll("[^\\p{L}\\p{N}]", "").toLowerCase();
内部
replaceAll
方法使用StringBuffer,所以您不必担心在内存中创建多个对象

下面是
Matcher
类中的
replaceAll
代码

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

但是stringBuffer没有replaceAll方法谢谢,如果我找不到使用stringBuffer的解决方案,我想我会使用String。你错了。在Java中,字符串对象是不可变的。每次更改字符串(例如replaceAll())时,都会创建一个新的字符串对象。谢谢,现在我决定使用String replaceAll方法。如果字符串对象分配让您担心,那么您应该预编译正则表达式!