2017-02-16 108 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; 
    } 
    ...... 

}

相关问题