我想为我的程序构建索引,其中最重要的一步是规范化文本。 例如我需要将“[(Mac Pro @apple)]”转换为“macproapple”,其中我过滤空格,标点符号([()]和特殊字符(@)。我的代码是这样的:
StringBuilder sb = new StringBuilder(text);
sb = filterPunctuations(sb);
sb = filterSpecialChars(sb);
sb = filterBlankSpace(sb);
sb = toLower(sb);
因为这会生成很多String对象,所以我决定使用StringBuilder。但我不知道如何使用StringBuffer。有人有什么建议吗?我还需要处理汉字。
答案 0 :(得分:2)
您可以将replaceAll
api与正则表达式
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();
}
答案 1 :(得分: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]", "")
删除字符串中A-Z和a-z中未表示的所有内容(由^表示)。解释了Java中的正则表达式here。
如果要在最后将字符串转换为小写,则需要使用s.toLowerCase()
。