2012-11-28 63 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