【问题标题】:Is there a simpler way to do parsing in Java on Android?有没有更简单的方法在 Android 上用 Java 进行解析?
【发布时间】:2011-01-25 20:32:38
【问题描述】:

我在执行本应简单的任务时遇到了困难。假设我有一个文本文件说明:

a = b

我希望我的程序在用户输入“a”时读取此文件并输出“b”。在 Python 或 C++ 中,我可以在大约 7 行或更少的时间内完成此操作。

但是,我很难找到在 Android 上执行此操作的简单方法。例如,我在 SO 上找到的一个示例在 6 个文件中有近 900 行。

有没有一种简单的方法来解析文件并在 Android 上返回我缺少的变量?

【问题讨论】:

  • 葛底斯堡地址实际上很短,大约 20 行,包含 80 个字符列和等宽字体。
  • 此外,我希望在 SO 上有 900 LOC 的这个假定答案。好像没找到……
  • 听起来您想从文件中提取内容(请参阅 Anon 的回答),然后使用 HashMap。
  • 那么您希望“输出”在哪里?在文本视图中?在一个按钮上?在状态栏中? “文件”在哪里?在 SD 卡上?在某处的服务器上? Android 为您提供了手机上的 GUI 框架,您必须预料到随之而来的开销。它不是为控制台应用程序提供输出
  • @Joe 请通读顶部的常见问题解答,了解构建问题的最佳方式。如果您将问题表述为仅包含与该问题相关的技术细节的实际问题,您将获得更好的帮助。请避免抱怨和咆哮。

标签: android parsing dalvik


【解决方案1】:
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?
}

【讨论】:

  • 笑声+1。 :) 当然,也需要正确答案。
【解决方案2】:

只要您对属性文件中使用的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
}

如果从用户那里获得了包含字符串"a" 的变量key,如果文件包含a = b 行,properties.getProperty ( key ) 的结果将等于"b"。我很确定您需要的不仅仅是 C++ 中的内容来从文件加载地图并处理所有转义和字符编码问题。

如果属性保存在 Android 项目的 assets 文件夹中名为 mappings.properties 的文本文件中,而不是保存在用户的文件系统中,那么您将获得它是这样的:

    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
    }

如果在编辑框中输入“a”,则从android tutorial 借用下一位以显示带有“b”的 toast 消息。也许这里是您获取行数的地方,因为与其他语言相比,使用 XML 文件设置 GUI 并在 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;
        }
    });

【讨论】:

    【解决方案3】:

    您绝对不需要数百行代码来实现这一点。它可以在几行中完成。我不知道你在看什么例子,但它们的作用可能比你描述的要多。

    【讨论】:

      猜你喜欢
      • 2010-12-15
      • 1970-01-01
      • 1970-01-01
      • 2012-10-25
      • 1970-01-01
      • 1970-01-01
      • 2020-02-15
      • 1970-01-01
      • 2023-02-21
      相关资源
      最近更新 更多