2013-12-18 79 views
1

語法檢查在我的項目中的一部分。 我有一個段落,我想將每個句子的所有首字母改爲大寫。 句子中的所有其他字母必須小寫。如何將每個句子的第一個字母轉換爲大寫字母,將所有其他字母轉換爲小寫字母?

"lijo was very intelligent.but his Character was not Good.He Played FootBall . 
he is veryClever,and wise." 

output 

"Lijo was very intelligent.But his character was not good.He played football . 
He is veryclever,and wise." 

我也做了上述這樣的:

public static void main(String[] args) { 
    String org= "lijo was very 'intelligent . but his Character was not Good.He Played FootBall .he is veryClever,and wise."; 
    String [] temp=org.split("\\."); 
    int len=temp.length; 
    String ne = "."; 
    for(int i=0;i<len;i++) 
    { 
     temp[i]=temp[i].toUpperCase(); 
     temp[i]=(temp[i].substring(0, 1)).toUpperCase()+(temp[i].substring(1, temp[i].length())).toLowerCase(); 
     System.out.println(temp[i]); 
    } 
} 

有沒有更簡單的方法來做到這一點?

+0

上面的代碼是否工作? –

+0

是的,它給出了輸出,但我正在尋找一個簡單的想法。 – Lijo

+0

當然,你不能解決專有名稱問題,它應該有主要上限,或者縮寫問題,這應該是全部上限。 –

回答

1

你可以這樣說:

private static final Pattern SENTENCE_START = Pattern.compile("(?:^|[.]\\s*)([a-z])"); 
private String sentenceCase(String org) { 
    char[] chars = org.toCharArray(); 
    Matcher m = SENTENCE_START.matcher(org); 
    while (m.find()) { 
     chars[m.start(1)] = Character.toUpperCase(chars[m.start(1)]); 
    } 
    return new String(chars); 
} 

正則表達式的解釋:

(?:^|[.]\s*)([a-z]) 

Regular expression visualization

(?:) - 無名組
^ - 串
開始| - 或
[.] - .字符
\s* - 零個或多個空格
[a-z] - 小寫字符

+0

非常感謝你 – Lijo

0

也許是這樣的:

StringBuilder resultBuilder = new StringBuilder(); 
String[] parts = input.split("\\."); 
for(String part : parts){ 
    resultBuilder.append(part.substring(0,1).toUppercase()) 
       .append(part.substring(1).toLowercase()) 
       .append("."); 
} 
return resultBuilder.toString(); 
+0

'\ i'沒有在java中 – rzymek

+0

一個有效的正則表達式改成了一個點,感謝察覺這 –

+0

另外,如果'part'是空('輸入=「.. X」'),然後'StringIndexOutOfBoundsException'被拋出。 – rzymek

1

NO辦法做到這一點既容易並妥善處理。確定一個句子開始或結束的地方非常棘手,並且存在許多微妙的問題。例如,並非所有的時期都結束句子;有些可用於縮寫或數字。在這些情況下,需要一些複雜的語言模型來進行合理的猜測。

此外,並不總是肯定句子應該以大寫字母開頭。例如,我似乎記得,沿着「von xxx」的句子開頭的句子不應該被大寫,等等。

tl; dr:你可以簡單的做法,讓它做很多的錯誤,或者你可以做到這一點非常困難,並且可以在大多數情況下工作,但可能不是所有情況。

1

大多數人會告訴你在一段時間內分裂,把你的文字切成句子。它將爲正確的輸入,但你的第一個「先生」,「博士」。或「等」。將導致整個事情失敗可怕。

既然你提到的語法,你需要成爲計算機語法的參與者。看看BNF並創建一些上下文敏感的嘗試來建模英語。然後,當你對令牌和產品有個好主意時,從一個簡單的詞典開始,它用可能的詞類標註每一段文本(例如「根」可以是名詞和動詞,具體取決於)。

如果你精通編程,那麼我在像JavaCC這樣的「編譯器 - 編譯器」方面取得了一些體面的成功;但是,有一條學習曲線。如果你想去分析器 - 組合器路由,你可能想要使用像JParsec這樣的東西,這似乎是塊上當前的「新事物」。

使用這些元素,您將開始獲得結果;但是,不要指望你的結果會很棒。這是其他人在事業上的一個大項目。然而,至少你會得到正確的結果(並在這個過程中學到很多東西)。始終偏愛方便;因爲代碼具有超出簡單需求的趨勢,並且正確添加是一件非常艱鉅的任務。

+0

。 – Lijo

+0

@ 404 http:// en。 wikipedia.org/wiki/Backus%E2%80%93Naur_Form https://javacc.java.net/ http://en.wikipedia.org/wiki/Abstract_syntax_tree http://nltk.org/book/ch08.html http ://en.wikipedia.org/wiki/Sentence_diagram http://en.wikipedia.org/wiki/Parse_tree等。這真的是一個清單,爲了讓它真正適用於所有事情,它是最值得撥款的尖端研究。 –

相關問題