我有一个公司的字符串描述,这是由不同用户编写的(手工打印)。这是一个例子(关注点,空格,首字母等):
XXXX是一家全球性的管理咨询,技术服务和 外包公司,拥有257000名服务客户的人数超过 120个国家..结合无与伦比的经验,全面 所有行业和业务职能部门的能力 对世界上最成功的公司XXXX的广泛研究 与客户合作,帮助他们成为卓越绩效企业 企业和政府。,公司产生的净收入 截至2012年7月31日的财政年度为279亿美元..
现在我想要的是将字符串格式化为更好的版本,如下所示:
XXXX是一家全球性的管理咨询,技术服务和 外包公司,拥有25.7万人,为客户提供服务 120个国家。结合无与伦比的经验,全面 所有行业和业务职能部门的能力 对世界上最成功的公司XXXX的广泛研究 与客户合作,帮助他们成为卓越绩效企业 企业和政府。该公司产生了净收入 截至2012年8月31日的财政年度为279亿美元。
我的问题是:是否有任何已定义方法的库可以执行所有拼写更正,不需要的空间删除等。?
到目前为止,我做的是用“,”代替“,”和“To / Case”(如果是“///”)。在前面等..
desc = desc.replace(" ", " ");
desc = desc.replace("..", ".");
desc = desc.replace(" .", ".");
desc = desc.replace(" ,", ", ");
desc = desc.replace(".,", ".");
desc = desc.replace(",.", ".");
desc = desc.replace(", .", ".");
desc = desc.replace("*", "");
我确信有更干净,更好的版本可以做到这一点。使用正则表达式可能??
任何解决方案都将受到赞赏。
答案 0 :(得分:0)
如果我试图解决您的问题,我可能会一次阅读文本1 char
,并随时格式化。例如,在psuedocode ...
while (has more chars){
char letter = readChar();
if (letter == ','){
// checking for the ',.' combination
letter = readChar();
if (readChar == '.'){
// write out a '.' only
out.print('.');
}
else {
// it wasn't the ',.' combination, so you need to output both characters, whatever they are
out.print(',');
out.print(letter);
}
}
else if (another letter you want to filter){
// etc.
}
else {
// doesn't match any of the filters, so just output the letter
out.print(letter);
}
}
基本上,如果您一次阅读文本1 char
,则可以随时检测所选的任何格式问题,并立即更正。这提供了性能改进,因为您只读取文本字符串一次(不是8次,就像您当前正在做的那样),并允许您根据需要添加任意数量的不同/复杂格式更改。然而,缺点是你需要自己编写逻辑而不是依赖于内置函数。