试图在数组中添加字母的出现

时间:2013-02-10 23:09:31

标签: java

所以我正在做的是创建一个读入2个文本文件的程序,1是纯文本文件,另一个是文本文件的加密版本。

我将字符串(对于每一行)设置为大写,我取字符串索引0-65的字符,这就是我在数组中的位置。

   import java.util.Scanner;
   import java.io.File;
   import java.io.FileNotFoundException;
   public class ReadIn {
public void fileReader(){
try{
    Scanner inFile1 = new Scanner(new File("plaintext.txt"));
    //Scanner inFile2 = new Scanner(new File("ciphertext.txt"));
    int lol[] = new int[27];
    while(inFile1.hasNextLine()){
        String base = inFile1.nextLine();
        base.toUpperCase();
        String placeHolder = base;
        for(int i=0;i<base.length();i++){
            if(placeHolder.charAt(0)==' '){}
            else if(base.charAt(0)=='.'){}else if(base.charAt(0)==','){}
            else if(base.charAt(0)=='"'){}else if(base.charAt(0)==':'){}
            else if(base.charAt(0)=='-'){}else if(base.charAt(0)=='?'){}
            else if(base.charAt(0)=='!'){}else{lol[(base.charAt(0)-65)]++;}
            placeHolder = placeHolder.substring(1);
        }
    }
    for(int j=0;j<lol.length;j++){
        System.out.println(lol[j]);
        //To show what is inside the Index.
    }

    }catch(FileNotFoundException e){
        System.out.println("File is not in the correct directory!");
    }catch(ArrayIndexOutOfBoundsException e){
        System.out.println("Array Index is to small!!");
    }
  }
}

这是我将数组大小设置为60

时得到的输出
  

142 119 0 0 0 62 60 0 682 0 0 179 24 232 0 62 0 0 0 184 0 0 440 0 63 0 0 0 0 0 0 0 471 182 215 94 60 409 0 242 174 15 30 62 273 79 405 189 0 195 472 673 101 62 324 0 124 0 0 0

问题是,当我运行程序时,为什么我的数组变小。如果所有字母都大写,那么从诸如'A'之类的字符中减去65应为0,因此在数组中将索引[0]加1。

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

更新

好的,所以我设置字符串以将其自身大写“base = base = base.toUpperCase();” 这完美无缺,除了我的数组必须设置为91以补偿ascii中的Z(90) 当我尝试去数组的索引点添加我使用[(base.charAt(0)-65)] ++ 但它抛出ArrayIndexOutOfBoundsException -21

1 个答案:

答案 0 :(得分:0)

您的base仍然包含小写字符,因为您没有使用toUpperCase()的返回值。这可以通过您的测试数据得到证实:您的输出范围跨越从65(A)到122(z)的ASCII范围,计算58个不同的字符代码。

Java中的字符串是不可变的,它们的值在构造之后不会改变。因此,base.toUpperCase()会返回新字符串,并且不会修改原始base字符串。您希望将base替换为其大写版本,因此您应该覆盖其值,使其指向返回的字符串:

base = base.toUpperCase();