如果String.charAt(i)遇到空格,它会破坏程序

时间:2016-04-04 15:30:04

标签: java string

以下代码基本上用ABC中的反向字符替换字符串中的字符。

EG。如果用户输入 - AbC

然后结果将是ZyX

我的问题是,如果输入包含空格,那么它会破坏代码并且不会继续执行。

import java.util.*;

public class HelloWorld{

     int[] capitals = new int[26];
     int[] smalls = new int[26];
     public static void main(String []args){
         HelloWorld rs=new HelloWorld();
         rs.Initialize();

         rs.Encode();
     }

     public void Encode()
     {
         Scanner reader = new Scanner(System.in);
         System.out.println("Enter string: ");
         String input = reader.next();

         //System.out.println("User entered: " + input);
         String newString="";
         int pos=0;
         for (int in = 0; in < input.length(); in++)
         {
             if(input.charAt(in) == ' ')
             {
                newString += " ";
             }
             else
             {
                if((int)input.charAt(in) >= 65 && (int)input.charAt(in) <= 90)
                {
                    for(int i = 0; i< 26; i++) {
                        if((int)input.charAt(in) == capitals[i]) {
                            newString += (char)capitals[25-i];
                        }
                    }
                }
                else if((int)input.charAt(in)>=97 && (int)input.charAt(in) <= 122)
                {
                    for(int i = 0; i< 26; i++) {
                        if((int)input.charAt(in) == smalls[i]) {
                            newString += (char)smalls[25-i];
                        }
                    }
                }
                else
                {
                    if(input.charAt(in) == ' ')
                        newString += " ";
                    else
                        newString += input.charAt(in);
                }

             }
            pos = 0;
         }
         System.out.println(newString);
     }


     public void Initialize()
     {
        int pos=0;
        for (int i=65;i<=90;i++)
        {
             capitals[pos] = i;
             smalls[pos]= i + 32;
             pos++;
        }
     }
}

我做错了什么?

2 个答案:

答案 0 :(得分:2)

致电Scanner.next()

  

查找并返回此扫描仪的下一个完整令牌。

通常,空格字符描绘Scanner的标记。从同一页面:

  

扫描仪使用的默认空白分隔符由Character.isWhitespace识别。

因此,当你调用Scanner.next()时,它只会在第一个空格之前读取,并且由于你再也没有读过它,所以在程序结束时会丢弃其余的输入。

如果您想要用户输入的所有内容,请改用nextLine

答案 1 :(得分:0)

根据Javadoc

下() 从此扫描仪中查找并返回下一个完整的令牌。

空格是分隔符,因此下一个标记始终是空格字符前字符串的第一部分。

您可以按照此处的说明设置分隔符模式:

http://docs.oracle.com/javase/7/docs/api/index.html