2015-10-17 44 views
0

所以我有我的程序工作,所以它可以將某個位置的字符移動到右側或左側。但是,一旦文本被移動,它不包括空格,並且不能處理不尋常的字符,如^^''#,只是把它們吐出來。希望有人能爲我提供一個總體想法/建議。過去幾個小時一直試圖解決這個問題,但沒有成功。字符輸出錯誤

public class hh { 
    public static void main(String[] args) { 
     String line = "the spa^^^ce doesn't show***"; 
     char[] buffer = line.toCharArray(); 

     for (int i = 0; i < buffer.length; i++) { 
      char element = buffer[i]; 
      element = (char) (element + 5); 
      if (element > 'z') { 
       element = (char) (element - 26); 
      } else if (element < 'a') { 
       element = (char) (element + 26); 
      } 
      buffer[i] = element; 
     } 
     System.out.println(new String(buffer)); 
    } 
} 

輸出:???

YMJ xufccchj itjxsFy xmtbIII

回答

1

在以下行中你是5增加焦炭,因此,所有的空間都轉換爲 '%' :

element = (char) (element + 5); 

由於此值較小'a',所以您再次增加26:

element = (char) (element + 26); 

這把它變成一個問號,看http://www.asciitable.com/

爲了防止這種情況,你可以添加一個條件,如:

if (element != ' ') 
{ 
    // increase by 5, etc... 
} 

你可能想看一看:

Character.isLetter(element); 
+0

這是我應用我的轉移.. ..所以我移動每個字符5 – user2982832

+0

謝謝尋求幫助 – user2982832

1

該空間不會顯示,因爲空間的ascii是32.

您加入5以它爲element = (char) (element + 5); 所以它成爲32 + 5 = 37。

現在,通過該條件,

else if (element < 'a'){ 
    element = (char) (element + 26); 
} 

37小於 'A',即97的ASCII,所以你加26,它使它37 + 26 = 63這是ascii?(問號)