Java String格式化解决方案

时间:2012-11-28 12:33:59

标签: java string formatting spell-checking

我有一个公司的字符串描述,这是由不同用户编写的(手工打印)。这是一个例子(关注点,空格,首字母等):

  

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("*", "");

我确信有更干净,更好的版本可以做到这一点。使用正则表达式可能??

任何解决方案都将受到赞赏。

1 个答案:

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