java:如何规范化文本?

Posted

技术标签:

【中文标题】java:如何规范化文本?【英文标题】:java: how to normalize text? 【发布时间】:2012-05-04 18:16:48 【问题描述】:

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

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

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

【问题讨论】:

***.com/questions/1805518/… 但是stringBuffer没有replaceAll方法 【参考方案1】:

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

String originalText = "[(Mac Pro @apple)]";
String removedString = originalText.replaceAll("[^\\pL\\pN]", "").toLowerCase();

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

这是replaceAllMatcher 类中的代码

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

【讨论】:

谢谢,现在我决定使用字符串替换方法。 如果字符串对象分配让你担心,那么你应该预编译正则表达式!【参考方案2】:

试试这个-

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中的正则表达式解释here。

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

【讨论】:

谢谢,如果找不到使用 StringBuffer 的解决方案,我想我会使用 String 你错了。在 Java 中,String 对象是不可变的。每次更改 String(例如 replaceAll())时,都会创建一个新的 String 对象。

以上是关于java:如何规范化文本?的主要内容,如果未能解决你的问题,请参考以下文章

在 tomcat 中部署战争后,Java 文本规范化的行为有所不同

如何使用 Python 规范化印地语文本?

文本文件规范化和模式匹配

如何规范化 Java 中的 URL?

如何更规范化编写Java 代码

如何在 Java 中规范化 Unicode 数字