StreamTokenizer - Как разбить каждого персонажа на токены - PullRequest
0 голосов
/ 15 марта 2020

Вкратце: как изменить StreamTokenizer, чтобы он разделял каждый символ входного файла на токены.

Например, если у меня есть следующий ввод:

1023021023584

Как это можно прочитать, чтобы каждый отдельный символ мог быть сохранен в указанном c индексе массива?

Ответы [ 2 ]

1 голос
/ 15 марта 2020

Чтобы читать символы по отдельности из файла как «токены», используйте Reader:

try (BufferedReader in = Files.newBufferedReader(Paths.get("test.txt"))) {
    for (int charOrEOF; (charOrEOF = in.read()) != -1; ) {
        String token = String.valueOf((char) charOrEOF);
        // Use token here
    }
}

Для полной поддержки символов Юникода из дополнительных плоскостей, например смайликов, нам нужно прочитать суррогатные пары :

try (BufferedReader in = Files.newBufferedReader(Paths.get("test.txt"))) {
    for (int char1, char2; (char1 = in.read()) != -1; ) {
        String token = (Character.isHighSurrogate​((char) char1) && (char2 = in.read()) != -1)
                      ? String.valueOf(new char[] { (char) char1, (char) char2 })
                      : String.valueOf((char) char1));
        // Use token here
    }
}
0 голосов
/ 15 марта 2020

Вы должны вызвать метод StreamTokenizer.resetSyntax (), как показано ниже

public static void main(String[] args) {
    try (FileReader fileReader = new FileReader("C:\\test.txt");){
        StreamTokenizer st = new StreamTokenizer(fileReader);
        st.resetSyntax();
        int token =0;
        while((token = st.nextToken()) != StreamTokenizer.TT_EOF) {
            if(st.ttype == StreamTokenizer.TT_NUMBER) {
                System.out.println("Number: "+st.nval);
            } else if(st.ttype == StreamTokenizer.TT_WORD) {
                System.out.println("Word: "+st.sval);
            }else {
                System.out.println("Ordinary Char: "+(char)token);
            }
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...