2017-02-16 5 views
-2

Я хочу, чтобы мой код взял первую строку моего .txt файла & напечатал его определенным образом, я думал, что у меня есть правильная идея, но ничего не происходит внутри консоли.Почему моя первая строка не будет напечатана из моего txt-файла?

Вот мой .txt файл:

ABCDEFGHIJKLMNOPQRSTUVWXYZOOOOOOO 
12345678912345678912345678912 

Вот мой .java файл:

import java.io.*; 

public class EncryptDecrypt { 

    public static void encrypt() throws IOException { 
     BufferedReader in = new BufferedReader(new FileReader("cryptographyTextFile.txt")); 
     String line = in.readLine(); 
     int iterator = 0; 
     char[][] table = new char[6][5]; 

     // fill array 
     for(int i = 0; i < 6; i++) { 
      for(int j = 0; j < 5; j++) {   
       table[i][j] = line.charAt(iterator++); 
      } 
     } 

     // print array 
     for(int i = 0; i < 6; i++) { 
      for(int j = 0; j < 5; j++) { 
       System.out.print(table[i][j] + " "); 
      } 
      System.out.println(); 
     } 
    } 

    public static void main(String[] args) throws IOException { 
     encrypt(); 
    } 
} 

Я хочу, чтобы мой код только взять первую строку из моего .txt файла и распечатать его следующим образом:

ABCDE 
GHIJK 
MNOPQ 
STUVW 
XYZOO 
OOOOO 

Вот error Я получаю:

Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 29 
at java.lang.String.charAt(String.java:686) 
at EncryptDecrypt.encrypt(EncryptDecrypt.java:14) 
at EncryptDecrypt.main(EncryptDecrypt.java:28) 
+0

В чем проблема, с которой вы сталкиваетесь? Вы пробовали использовать его с отладчиком? – ControlAltDel

+0

Попробуйте окружить свой код «try-catch» и посмотрите, есть ли какая-либо ошибка ввода-вывода, это также хорошая практика. – aUserHimself

+1

Копирование кода вашего метода шифрования и создание файла, подобного вашему, работает для меня, как и ожидалось. –

ответ

0

Ваш выход отличается (потому что она работает) от нужного выхода, потому что вы не фильтровать каждый 6-й символ. Я думаю, что вы пытаетесь это сделать ...

Я думаю, что нашел ваше решение, используя modulo, который вы можете искать на каждом шестом номере. то есть 6% 6 = 0, а 5% 6 = 1

// fill array 
    for (int i = 0; i < 6; i++) { 
     for (int j = 0; j < 5; j++) { 
      if ((iterator + 1) % 6 == 0) { 
       iterator++; 
       j--; 
      } else { 
       //System.out.println(i+" "+ j + " " +iterator + " " + line.charAt(iterator)); 
       char t = line.charAt(iterator++); 
       table[i][j] = t; 
      } 
     } 
    } 

также добавить еще 2 символа в строку. line.charAt (iterator ++) выполняет поиск java.lang.StringIndexOutOfBoundsException. поэтому вы получаете ошибку

0

Уроженец substring() метод может быть ваша помощь с некоторыми условиями и шагом

 String str = "ABCDEFGHIJKLMNOPQRSTUVWXYZOOOOOOO"; 

     int ite = str.length()/5; 
     int i = 0, j = 0; 

     while (i < ite) { 

      System.out.println(str.substring(j, (j += 5))); 
      i++; 
     } 

     System.out.println(str.substring(ite * 5, str.length() % 5 + ite * 5)); 
0

Вы можете использовать substring так:

public static void main(String[] args) throws IOException { 
    String s = "ABCDEFGHIJKLMNOPQRSTUVWXYZOOOOOOO"; 

    //find how many block i can to get of x length in your case of 5 
    int length = s.length()/5; 
    for (int i = 0; i < length; i++) { 
     System.out.println(s.substring(i*5, i*5+5)); 
    } 
} 

Убедитесь, что вы будете пропустите какой-либо символ, если s.length()%5 не равен нулю, поэтому вы можете добавить остальное в конце так:

if(s.length() % 5 > 0){ 
    System.out.println(s.substring(length * 5, s.length())); 
} 

Итак, это напечатает остальную часть вашей строки.

+0

за то, что вы собрали проголосовавший за мой квест? проверьте сейчас @Ravi MCA –

 Смежные вопросы

  • Нет связанных вопросов^_^