更改文本文件中的每个字母并打印

时间:2015-02-08 13:52:03

标签: java io java-io

我想更改文本文件中的每个字母。但我有这个错误:

线程中的异常" main" java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:0     at java.lang.String.charAt(String.java:658)     在Soru3.main(Soru3.java:31)

String line;

    while (inputStream.hasNextLine()) {
        line = inputStream.nextLine();
        String[] harfler = line.split("");
        String satir = "";

        char[] ary = new char[harfler.length];

        for (int i = 0; i < ary.length; i++) {
            ary[i]=harfler[i].charAt(0);
        }

        for (int i = 0; i < line.length(); i++) {

            if ( ( ((int) ary[i] <= 77) && ((int) ary[i] >= 65)) 
                    && (((int) ary[i] >= 97) && ((int)ary[i] <= 109)))

                ary[i] = (char) ( (int)(ary[i]) + 13) ;

            else if ((((int) ary[i] > 77) && ((int) ary[i] <= 90))
                    && (((int) ary[i] > 109) && ((int) ary[i] <= 122)))

                ary[i] = (char) ((int) ary[i] - 11);

            else {
                ary[i]=ary[i];
            }

            System.out.println(satir + line);
        }

    }
    inputStream.close();

3 个答案:

答案 0 :(得分:0)

当你的文本文件中有一个empoty行时会发生这种情况。为了避免这种情况,您需要从以下位置更改循环:

for (int i = 0; i < ary.length; i++) {

for (int i = 0; i < line.length() != 0 && ary.length; i++) {

当你有一个空行时,你的行中不会有任何字符,我们知道字符串由字符数组备份。因此,当line为空时,你在char数组中没有任何元素,并且你试图在for循环中使用ary[i]=harfler[i].charAt(0);访问第0个元素,因此你会得到一个例外。

答案 1 :(得分:0)

由于'ary'有harfler.length元素,你应该改变你的主循环:

for (int i = 0; i < line.length(); i++) {

for (int i = 0; i < ary.length; i++) {

答案 2 :(得分:0)

您获得的错误是由于源文件中的空行而导致的。我没有直接解决这个问题,而是看到你似乎只是以冗长而低效的方式将这一行分解为字符数组。

为什么不尝试:

while (inputStream.hasNextLine()){
    line = inputStream.nextLine();

    char[] ary = line.toCharArray();

    for(int i = 0; i < ary.length; i++){

    // Rest of code...

如果行可能是null,你也应该首先检查它。