0

我有一个公司的字符串描述,它是由不同的用户(手写)写的讨厌的。这是一个示例(关注点、空格、首字母等):

XXXX 是一家全球管理咨询、技术服务和外包公司,拥有 257,000 名员工,为 120 多个国家/地区的客户提供服务。结合无与伦比的经验、跨所有行业和业务职能的综合能力以及对全球最成功公司的广泛研究,XXXX 与客户帮助他们成为高绩效企业和政府。截至 2012 年 7 月 31 日的财政年度,公司创造了 279 亿美元的净收入。

现在我想要的是将字符串格式化为更好的版本,如下所示:

XXXX 是一家全球管理咨询、技术服务和外包公司,拥有 257,000 名员工,为 120 多个国家的客户提供服务。XXXX 结合无与伦比的经验、跨所有行业和业务职能的综合能力以及对全球最成功公司的广泛研究,与客户合作,帮助他们成为高绩效企业和政府。该公司在截至 2012 年 8 月 31 日的财政年度创造了 279 亿美元的净收入。

我的问题是:是否有任何已定义方法的库可以进行所有拼写更正、不需要的空格删除等..?

到目前为止,如果是“///”,我会用“,”和 toUpperCase() 替换像“”这样的东西。在前面等。

desc = desc.replace("  ", " ");
desc = desc.replace("..", ".");
desc = desc.replace(" .", ".");
desc = desc.replace(" ,", ", ");
desc = desc.replace(".,", ".");
desc = desc.replace(",.", ".");
desc = desc.replace(", .", ".");
desc = desc.replace("*", "");

我确信有一个更清洁和更好的版本可以做到这一点。也许使用正则表达式?

任何解决方案将不胜感激。

4

1 回答 1

0

如果我试图解决您的问题,我可能会一次阅读文本 1 char,并在您进行时对其进行格式化。例如,在伪代码中......

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 次,就像您目前正在做的那样),并允许您添加任意数量的不同/复杂的格式更改。然而,缺点是您需要自己编写逻辑,而不是依赖内置函数。

于 2012-11-28T12:37:03.663 回答