Java字符串格式化解决方案

Java字符串格式化解决方案,java,string,formatting,spell-checking,Java,String,Formatting,Spell Checking,我有一个公司的字符串描述,它是由不同的用户(手写)编写的。以下是一个示例(重点关注点、空格、首字母等): XXXX是一家全球管理咨询、技术服务和 外包公司,拥有25.7万名员工,服务于多个国家的客户 120个国家。。结合无与伦比的经验,全面 跨所有行业和业务职能的能力,以及 广泛研究世界上最成功的公司,XXXX 与客户合作,帮助他们实现高绩效 企业和政府,该公司产生的净收入为 截至2012年7月31日的财年为279亿美元 现在,我想将字符串格式化为更好的版本,如下所示: XXXX是一家全球管理咨

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

XXXX是一家全球管理咨询、技术服务和 外包公司,拥有25.7万名员工,服务于多个国家的客户 120个国家。。结合无与伦比的经验,全面 跨所有行业和业务职能的能力,以及 广泛研究世界上最成功的公司,XXXX 与客户合作,帮助他们实现高绩效 企业和政府,该公司产生的净收入为 截至2012年7月31日的财年为279亿美元

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

XXXX是一家全球管理咨询、技术服务和 外包公司,拥有25.7万名员工,服务于多个国家的客户 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("*", "");
我相信有一个更干净更好的版本可以做到这一点。也许使用正则表达式


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

如果我试图解决您的问题,我可能会一次阅读文本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次),并允许您添加任意多个不同/复杂的格式更改。但是,缺点是,您需要自己编写逻辑,而不是依赖内置函数。

您要进行的替换非常复杂,因此您需要一个解析器esp来翻译日期格式。日期格式不是强制性的,我更关注简单的更正,如点、逗号、空格、,首字母、逗号/点之间的空格等。。关于如何写这些东西,我们有一个规则:在一个点之后,在另一个句子之前必须有一个空位。。等等。是的,您应该尝试使用regexp来完成此操作。你尝试过什么?正如我在帖子中提到的,我正在考虑它,但我对复杂的regexp表达式不太熟悉,我更希望有一个完整的库或一组类:)但是谢谢,我研究得越多,regexp就越有可能成为我唯一的解决方案。这只会稍微提高性能,但确实如此,如果遵循这些规则,则应该将其编写为连接字符串,但这样代码的可读性也会降低。