2017-02-16 105 views
1

我有一個有兩個輸入的方法。問題是當我輸入類似快速汽車的東西時。當它在計算後返回消息時,我將得到idvwfdu它將消除這兩個單詞之間的空間,但我希望idvw fdu。我該如何解決這個問題?保留單詞之間的空格java

for (int i=0; i<text.length();i++){ 
     char c=text.charAt(i); 
     char character=(char)(c+shift); 

     if (character >='a' && character <='z'){ 

      newMsg+=character; 

     }else if(character > 'z') { 

      newMsg+=(char)((char)(c-(26-shift))); 
     } 


} 

return newMsg; 
+0

添加一些'別的if'用於'」「'? – 2017-02-16 15:45:05

+0

你想爲「a-z」字符擁有相同的空間功能嗎? – nafas

+0

您只檢查a到z和大於z的字符之間的字符。空間不到一個,你不檢查。查看一個ASCII表來查看哪個ASCII碼被分配給一個空間。 – kojow7

回答

2

有與您的代碼的兩個問題。第一個是,你在這裏檢查像

char character=(char)(c+shift); // you already lost space character here 

之前移的每一個字符,其次你在這裏

if (character >='a' && character <='z'){ 

    newMsg+=character; 

    }else if(character > 'z') { // space will be shifted once again 

     newMsg+=(char)((char)(c-(26-shift))); 
    } 

失去了空間,因此,爲了解決這個問題,你必須保持兩個評價的頭腦和結果應該看起來像這樣

String text = "fast car"; 
String newMsg = ""; 
int shift = 1; 
for (int i = 0; i < text.length(); i++) { 
     char c = text.charAt(i); 
     char character = (char)(c != ' ' ? c + shift : c); // first space check 

     if (character >= 'a' && character <= 'z') { 

      newMsg += character; 

     } else if (character == ' ') newMsg += ' '; // second space check 
     else if (character > 'z') { 

      newMsg += (char)((char)(c - (26 - shift))); 
     } 

System.out.println(newMsg); // prints gbtu dbs 
+0

如果你在括號中添加了括號,那麼你的回答會很好看...... if – walen

+0

謝謝你,現在工作正常! – Maro

+0

@ walen啊,那麼如果可能的話,我個人偏好保留一個班輪。但是,我試着在生產代碼中不這樣做:D –

1

如果您關注的是幾乎不被保留了空間,

更換

if (character >='a' && character <='z'){

if ((character >='a' && character <='z') || character == ' '){

+0

即使當我這樣做,它也擺脫了空間..:/ – Maro

+0

@VHS你沒有考慮到原始輸入字符在條件前被「移位」。見穆拉特的答案。 – walen

+0

@瓦倫,是的。你是對的。看起來OP已經接受穆拉特的答案。 – VHS

0

在for循環中添加空格字符的條件並繼續。

對(INT I = 0;我< text.length(); i ++在){

char c=text.charAt(i); 

    if(c== ' '){ 
     newMsg+=c; 
     continue; 
    } 
    ...... 

}

相關問題