Android:读取文本文件并抓取特定单词后面的行

时间:2012-12-13 12:17:10

标签: java android

我试图在一条遵循预先设定参考的线上抓取一段数据

这是我到目前为止的代码,只是抓住了文本中的所有内容

public void onClick(View v) {
    // TODO Auto-generated method stub

    if (v.getId() == R.id.btnRead) {

        try {
            readfile();
        } catch (IOException e) {
            Toast.makeText(getApplicationContext(), "Problems: " + e.getMessage(), 1).show();
        }
    }

private void readfile() throws IOException {     

    String str="";
    StringBuffer buf = new StringBuffer();          
    InputStream is = this.getResources().openRawResource(R.drawable.test);
    BufferedReader reader = new BufferedReader(new InputStreamReader(is));


    if (is!=null) { 

        while ((str = reader.readLine()) != null) { 

            buf.append(str + "\n" );


        }               
    }       
    is.close(); 
    Toast.makeText(getBaseContext(), buf.toString(), Toast.LENGTH_LONG).show();

我考虑过添加这样的东西

if (str == "name:"){

   reader.readNextLine();

    }
else {
    (buf.append("Referance not found" + "\n"));
}

这样它就能找到预先设定的单词并抓住紧随其后的行 显然我不能

readNextLine

所以试图找到另一种简单的方法

2 个答案:

答案 0 :(得分:1)

您的问题是您比较参考地址而不是价值。

用于比较的运算符==仅对基本类型有效。 String是一种对象类型。

要比较对象类型,您应始终使用equals方法或compareTo如果对象支持它。

if("name".equals(str)) {
  reader.readNextLine();
} else {
  buf.append("Referance not found\n");
}
提示:

StringBuffer是线程安全的,你不需要它。更好的选择是StringBuilder

答案 1 :(得分:0)

您是否考虑过正则表达式?

    String expression = "name: ";
CharSequence inputStr = input;
Pattern pattern = Pattern.compile(expression, Pattern.CASE_INSENSITIVE);
Matcher matcher = pattern.matcher(inputStr);
if (matcher.matches()) {
    // here's where you'd write code to grab the next x amount of information
} else {
   // not found
}

或者,如果您接受固定数量的信息(例如,行是名称:Max Power),那么您可以使用字符串标记器/拆分,检查“name:”是否与其中一个标记匹配,然后抓住接下来会有两个令牌,这将是你的名字。您可能还想使用equalsIgnoreCase而不是==来表示字符串,因为它不会产生您想要的结果!