繁体   English   中英

如何从android中的文本文件中提取子字符串?

[英]How to extract a substring from a text file in android?

我想知道如何从android中的文本文件中提取子字符串:

文本文件如下所示:

[start_delimeter]

0|1|text1

0|1|text2

0|1|text3

0|1|text4

[end_delimiter]

我想在start_delimeter和end_delimiter之间提取字符串。

我怎么能在java语言/ android中做到这一点?

序列:

  • 首先,您需要将您的文本文件放在assets目录中(ex filename.txt
  • 读取文件(使用BufferedReader ),直到读取开始分隔符
  • 从文件中读取每一行并使用PatternMatcher处理它,直到找到结束分隔符(或者使用String.split("|")

这是代码:

    // first get the file from the assets
    InputStream is = context.getAssets().open("filename.txt");

    try {
        // start reading (line by line)
        BufferedReader r = new BufferedReader(new InputStreamReader(is));

        // wait for the start delimiter
        String line;
        while ((line = r.readLine()) != null) 
            if (line.equals("[start_delimiter]"))
                break;

        // this is the pattern for the data "int|int|String":
        Pattern p = Pattern.compile("\\|(\\d+)\\|(\\d+)\\|(.+)");

        // read it line by line...
        while ((line = r.readLine()) != null) {
            // ... till the end comes (end delimiter)
            if (line.equals("[end_delimiter]"))
                break; //done

            // if the data matches the pattern...
            Matcher m = p.matcher(line);
            if (m.matches()) {
                // ... handle it!
                int first   = Integer.parseInt(m.group(1));
                int second  = Integer.parseInt(m.group(2));
                String text = m.group(3);

                //...
            }
        }

    } finally {
        is.close();
    }

我想在start_delimeter和end_delimiter之间提取字符串。

我怎么能在java语言/ android中做到这一点?

将文件逐行读入String。 然后

str.subString(startIndex,endIndex);

简单地说,我会用BufferedReader逐行读取文件。 找到起始分隔符后,评估每个后续行以查看它是否为结束分隔符。 如果它不是分隔符,则将字符串写入集合。 到达结束分隔符后,停止阅读并关闭阅读器。

BufferedReader示例

使用BufferedReader并逐行读取文件。

BufferedReader r = ...;
//drop until we hit the delimiter
while (!r.readLine().equals("[start_delimeter]"));
String line;
while (!(line=r.readLine()).equals("[end_delimiter]")) {
    //do something with "line" here
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM