2013-10-03 79 views
0

我已經構建了一個字符串生成器來將空格添加到文本中,如果它是大寫。輸入的句子看起來像這樣:「ThisIsASentence。」由於它以大寫字母開頭,因此字符串生成器會將句子修改爲如下所示:「This Is A Sentence。」字符串方法切出字符串部分

我的問題是,如果我有一個像「thisIsASentence。」這樣的句子。字符串生成器將像正常一樣分離句子:「這是一個句子」。

在第一個字符的前面還有一個空格。

當句子通過這條線運行:

result = result.Substring(1, 1).ToUpper() + result.Substring(2).ToLower(); 

如果第一個字母進入是小寫的,它被切斷,第二個字母大寫變。

該行是爲了保持第一個字母輸入大寫,並設置其餘的小寫字母。

在運行該行之前添加修剪語句會在輸出中不改變任何內容。

這裏是我的整個代碼現在:

 private void btnChange_Click(object sender, EventArgs e) 
    { 
     // New string named sentence, assigning the text input to sentence. 
     string sentence; 
     sentence = txtSentence.Text; 

     // String builder to let us modify string 
     StringBuilder sentenceSB = new StringBuilder(); 

     /* 
     * For every character in the string "sentence" if the character is uppercase, 
     * add a space before the letter, 
     * if it isn't, add nothing. 
     */ 
     foreach (char c in sentence) 
     { 
      if (char.IsUpper(c)) 
      { 
       sentenceSB.Append(" "); 
      } 
      sentenceSB.Append(c); 
     } 


     // Store the edited sentence into the "result" string 
     string result = sentenceSB.ToString(); 

     // Starting at the 2nd spot and going 1, makes the first character capitalized 
     // Starting at position 3 and going to end change them to lower case. 
     result = result.Substring(1, 1).ToUpper() + result.Substring(2).ToLower(); 

     // set the label text to equal "result" and set it visible. 
     lblChanged.Text = result.ToString(); 
     lblChanged.Visible = true; 

回答

1

運行帶有「thisIsASentence」的代碼,你的foreach循環後,結果將是「這是一個句子」,因爲它不會插入空間在一開始。

那麼你的下一行,將索引1處字(這是在這個「H」),使它大寫,然後追加字符串的休息,造成「他是一個句子」

爲了解決這個問題,你可以在循環後做result = result.Trim(),然後在指數0開始,使得下一行result = result.Substring(0, 1).ToUpper() + result.Substring(1).ToLower();

+0

現在我的問題是,如果第一個字母是輸入大寫。它會將其更改爲小寫。難道是使用toUpper();在一個已經大寫的字母改變它降低? – NWcis

+0

我測試了這個,它工作正常。確保你正在修剪結果,結果= result.Trim();或初始化結果:string result = sentenceSB.ToString()。Trim(); – Bryan

+0

哦,我的,我怎麼沒有意識到這一點。我修剪了錯誤的字符串... grr .. – NWcis

0

隨着result.SubString(1,1),我們假定你是輸入的第一個字母總是大寫,所以你總是會在字符串的開頭添加一個空格。你已經看到,情況並非如此。

因此,我認爲基本上有兩種方法供您選擇:

換行線在if塊檢查更換前位;

如果您的規格允許,請首先輸入您的輸入的第一個字母。