Как распознать специальную строку-разделитель при чтении из файла строк? - PullRequest
1 голос
/ 18 марта 2011

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

Моя программа считывает строки и успешно сохраняет их в ArrayList, но он не распознает символ >< и, следовательно, чтение двоичных строк не успешно.

Код


try {
    FileInputStream fstream = new FileInputStream(fc.getSelectedFile().getPath());
    // Get the object of DataInputStream
    DataInputStream ino = new DataInputStream(fstream);
    BufferedReader br = new BufferedReader(new InputStreamReader(ino));
    String ln;
    String str, next;
    int line, c =0;

    while ((ln = br.readLine()) != null) {
        character = ln;
        System.out.println(character);
        iname.add(ln); // arraylist that holds the strings
        if (iname.get(c).equals("><")) {
            break; // break and moves
            // on with the following while loop to start reading binary strings instead.

        }
        c++;
    }

    String s = "";
    // System.out.println("SEQUENCE of bytes");

    while ((line = ino.read()) != -1) {
        String temp = Integer.toString(line, 2);
        arrayl.add(temp);
        System.out.println("telise? oxii");
        System.out.println(line);
    }

    ino.close();

} catch (Exception exc) { }

Файл, который я пытаюсь прочитать, например:

 T 
 E 
 a
 v 
 X 
 L 
 A 
 . 
 x 
 "><" 
 sequence of bytes.

Где последняя часть сохраняется в байтах и ​​в текстовом файле выглядит так. не беспокойтесь, этот бит работает. все строки сохраняются в новой строке.

Ответы [ 3 ]

0 голосов
/ 18 марта 2011

<- это два символа, а iname.get (c) - только один символ. </p>

Что вам нужно сделать, это проверить, равен ли ln>, а затем еще один тест, если следующий символ равен<Если оба теста пройдут, то вырвитесь из цикла. </p>

вам придется быть осторожным

0 голосов
/ 18 марта 2011

Используйте Сканер .Он позволяет указать разделитель и имеет методы для чтения входных токенов как String или int.

0 голосов
/ 18 марта 2011

Не могли бы вы сделать что-то вроде:

while ((ln = br.readLine()) != null){
            character=ln;
            System.out.println(character);

            //
            // Look for magic characters >< and stop reading if found
            //

            if (character.indexOf("><") >= 0) {
               break;
            }

            iname.add(ln);
    }

Это сработает, если вы не хотите добавлять магический символ в ваш ArrayList. Ваш пример кода неполон - если у вас все еще есть проблемы, вам нужно опубликовать весь класс.

...