Есть ли более простой способ сделать разбор в Java на Android? - PullRequest
0 голосов
/ 25 января 2011

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

a = b

Я хочу, чтобы моя программа читала этот файл и выводила «b» всякий раз, когда пользователь вводит «a». В Python или C ++ я могу сделать это в 7 строк или меньше.

Однако у меня возникают трудности с поиском простого способа сделать это на Android. Например, один пример, который я нашел здесь на SO, содержал около 900 строк в 6 файлах.

Есть ли простой способ проанализировать файл и вернуть на Android переменную, которую мне не хватает?

Ответы [ 3 ]

12 голосов
/ 25 января 2011
BufferedReader r = new BufferedReader(new FileReader(filename));
string s;
while(s = r.readLine()) {
    //Oh hey, I got a line out of the file.
    //In three lines of code.
    //So what's all this Android-bashing about?
}
4 голосов
/ 26 января 2011

Пока вы довольны форматом a = b, используемым в файлах свойств, вы получаете 99% пути к своей цели с помощью

Properties properties = new Properties();
try {
    properties.load(new FileInputStream(filename));
} catch (IOException e) {
    // the file is missing or is not in 'a = b' format
}

Получив переменную keyсодержащий строку "a" от пользователя, результат properties.getProperty ( key ) будет равен "b", если файл содержит строку a = b.Я почти уверен, что вам нужно больше, чем в C ++, чтобы загрузить карту из файла и решить все проблемы с экранированием и кодировкой символов.

Если свойства хранятся в текстовом файле с именем mappings.Свойства в папке assets вашего проекта Android, а не в файловой системе пользователя, тогда вы получите следующее:

    final AssetManager am = getResources().getAssets();
    final Properties properties = new Properties();

    try {
        properties.load( am.open("mappings.properties"));
    } catch (IOException e) {
        // the file is missing or is not in 'a = b' format
    }

Этот следующий бит заимствован из Android-учебник , чтобы показать тостовое сообщение с буквой «b», если в поле ввода введено «a».Возможно, именно здесь вы можете получить счетчик строк, поскольку настройка графического интерфейса пользователя с файлами XML и добавление слушателей в Java довольно многословно по сравнению с другими языками.Это связано с синтаксисом Java и XML, а не с виртуальной машиной.

    final EditText edittext = (EditText) findViewById(R.id.edittext);

    edittext.setOnKeyListener(new OnKeyListener() {
        @Override
        public boolean onKey(View v, int keyCode, KeyEvent event) {
            // If the event is a key-down event on the "enter" button
            if ((event.getAction() == KeyEvent.ACTION_DOWN) &&
                (keyCode == KeyEvent.KEYCODE_ENTER)) {
              // Perform action on key press
              Toast.makeText(YourOuterViewClass.this, 
                  properties.getProperty(edittext.getText().toString()),
                  Toast.LENGTH_SHORT).show();
              return true;
            }
            return false;
        }
    });
2 голосов
/ 25 января 2011

Вам определенно не нужны сотни строк кода для достижения этой цели.Это можно сделать в несколько строк.Я не знаю, какие примеры вы рассматривали, но они, вероятно, делали намного больше, чем вы описываете.

...