2012-11-28 27 views
0

我有一个公司的字符串描述,这是由不同用户(手工输入)编写的令人讨厌的字符串。下面是一个例子(重点点,空格,首字母等):Java字符串格式化解决方案

XXXX是全球menagement咨询,技术服务和 外包服务公司,257000people服务客户超过 120个国家。结合无与伦比的经验,全面的 能力横跨所有行业和业务功能,并且 广泛研究世界上最成功的公司,XXXX 与客户合作,帮助他们成为高绩效的 企业和政府。,公司产生净收入 截至2012年7月31日止财政年度为279亿美元..

现在,我想要的是字符串格式化为更好一点的版本是这样的:

XXXX是全球领先的管理咨询,技术服务和 外包公司,拥有257,000人口以上的客户提供服务比 120个国家。结合无与伦比的经验,综合所有行业和业务功能 能力,和 广泛研究全球最成功的公司,XXXX 与客户合作,帮助他们成为高性能 企业和政府。该公司净收入的 US $ 27.9十亿截至8月31日的财年,2012年

我的问题是:是否有与已经定义的方法任何库,它可以做所有的拼写校正,不需要去除空间等等。?

到目前为止,如果是“///”,我会将其替换为“,”替换为“,”和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("*", ""); 

我敢肯定有一个更干净和更好的版本来做到这一点。使用正则表达式可能?

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

+0

你想要做的替换是相当复杂的,所以你需要一个解析器esp翻译日期格式。 –

+0

日期格式不是强制性的东西,我更关注像点,逗号,空格,第一个字母,逗号/点之间的空格等简单的更正。我们确实有如何写这些东西的规则:after一个点必须在另一个句子之前有一个空闲空间..等。 – AlenBer

+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次,就像您现在正在做的那样),并且允许您根据需要添加任意多种不同/复杂的格式设置更改。然而,不利的一面是,你需要自己编写逻辑,而不是依赖内置的函数。

+0

这只会增加一点性能,但是如果遵循规则,它应该被写为已连接的字符串,但它的可读性较差。 – AlenBer