java.util.Scanner a načítavanie znak po znaku

Dobré ráno! Ako načítavať zo textového súboru znak po znaku?

Samozrejme, dá sa ultimátna kombinácia BufferedReadera, FileReadera kadečoho, ale to by sme sa museli zabávať s pretypovávaním intu na char (lebo read() funguje na intoch).

Namiesto toho čít (cheat, pozn. prekl.)

java.util.Scanner vie načítavať riadky, znaky, tokeny z reťazcov, InputStreamov, súborov, čohokoľvek a to dokonca s podporou oddeľovača.

A keď dáme prázdny reťazec ako oddeľovač, zrazu vieme čítať po znakoch.

Lebo každý znak je oddelený od nasledovného ničím.

File file = new File("input.txt");
Scanner scanner = null;
try {
    scanner = new Scanner(file)
                .withDelimiter("");
    while(scanner.hasNext()) {
        String token = scanner.next();
        char c = token.charAt(0);
        System.out.println(c);
    }
} finally {
    if(scanner != null) {
        scanner.close();
    }
}

Alebo unit test!

import static org.junit.Assert.*;
import java.util.Scanner;
import org.junit.Test;

public class CharacterReadingScannerTest {
    @Test
    public void testReadCharByChar() throws Exception {
        String input = "0123456789 ABCDEFGHIJKLM";
        StringBuilder expected = new StringBuilder(input);

        Scanner scanner = new Scanner(input).useDelimiter("");
        StringBuilder buf = new StringBuilder();
        while(scanner.hasNext()) {
            String singleCharacter = scanner.next();
            assertEquals(1, singleCharacter.length());
            buf.append(singleCharacter);
        }       

        assertEquals(expected, buf);
    }
}

Na moje stavby hľaď, ty mocný a zúfaj si!

Pridaj komentár

Vaša e-mailová adresa nebude zverejnená. Vyžadované polia sú označené *