Java readline пробелы - PullRequest
       3

Java readline пробелы

0 голосов
/ 10 февраля 2012
FileInputStream fstream = new FileInputStream("data.txt");

// Get the object of DataInputStream
DataInputStream in = new DataInputStream(fstream);

BufferedReader br = new BufferedReader(new InputStreamReader(in));

String strLine;
//Read File Line By Line

while ((strLine = br.readLine()) != null) 
  {
    //Test if it is a line we need
    if(strLine.charAt(0) != ' ' && strLine.charAt(5) == ' '
       && strLine.charAt(10) == ' ' && strLine.charAt(15) == ' '
       && strLine.charAt(20) == ' ' && strLine.charAt(25) == ' ' )
      {
        System.out.println (strLine);
      }
  }

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

Ответы [ 3 ]

2 голосов
/ 10 февраля 2012

Если длина строки 0, и вы пытаетесь определить символ в местоположении 10, например, вы получите исключение.Просто поставьте галочку, чтобы убедиться, что строка не является пробелом перед обработкой.

if (line != null && line.trim().length() > 0)
{
   //process this line
}
0 голосов
/ 10 февраля 2012

То, что вы здесь делаете, это проверка устава до 25-го символа с использованием strLine.charAt(25), тогда как ваш String strLine может не иметь таких символов. Метод charAt(int index) выдаст IndexOutOfBoundsException - если аргумент index не меньше длины этой строки.

Вы можете найти длину strLine, позвонив по номеру strLine.length(), а затем отметив charAt() с 0 до strLine.length() - 1, и вы не увидите это исключение.

0 голосов
/ 10 февраля 2012

Пустая строка будет не нулевой, а пустой строкой ''. Он сломается, если вы попытаетесь прочитать символ с индексом 0.

 while ((strLine = br.readLine()) != null) 
 {
    //remove whitespace infront and after contents of line.
    strLine = strLine.trim();

    if (strLine.equals(""))
      continue;

     //check that string has at least 25 characters when trimmed.
    if (strLine.length() <25)  
       continue;

    //Test if it is a line we need
    if(strLine.charAt(0) != ' ' && strLine.charAt(5) == ' ' && strLine.charAt(10) == ' ' && strLine.charAt(15) == ' ' && strLine.charAt(20) == ' ' && strLine.charAt(25) == ' ' )
    {
         System.out.println (strLine);
    }
 }

Вы также можете попробовать использовать класс Java Scanner. Это действительно полезно для чтения в файлах.

...