2015-10-17 77 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?(问号)