首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android -循环通过多行文本文件,从冒号后的类别中提取数据,并存储在类变量中

Android -循环通过多行文本文件,从冒号后的类别中提取数据,并存储在类变量中
EN

Stack Overflow用户
提问于 2019-10-28 20:11:03
回答 2查看 89关注 0票数 0

我试图从原始目录中的一个原始文本文件中提取数据,方法是读取该文件,获取冒号后面的字符串,并将其存储在一个class变量中。原始文本文件如下:

代码语言:javascript
复制
category:AI
photo:ai4.png
title:'I will destroy humans': Humanoid AI robot Sophia gets Saudi citizenship
website:https://www.deccanchronicle.com/lifestyle/viral-and-trending/111117/i-will-destroy-humans-humanoid-ai-robot-sophia-gets-saudi-citizenship.html
date:11-11-2017
category:cybersecurity
photo:cyber3.png
title:WhatsApp and Telegram media files aren't so secure
website:https://www.theverge.com/2019/7/15/20692184/whatsapp-telegram-media-files-android-messaging-encryption
date:15-07-2019

我希望能够读取第一行并检查它是什么类别,如果类别是照片,我希望将ai4.png存储在与其相关的类变量中。在它到达date之后,日期数据存储在date类变量中。它将实例化一个新类,并用一个新类再次开始该过程。

类如下所示:

代码语言:javascript
复制
public class Link{
    private String title;
    private String imageName;
    private String url;

    Link(String t,String i,String u){
        this.title=t;
        this.imageName=i;
        this.url=u;
    }
    public String getTitle() {
            return title;
        }

        public void setTitle(String title) {
            this.title = title;
        }

        public String getImageName() {
            return imageName;
        }

        public void setImageName(String imageName) {
            this.imageName = imageName;
        }
    public String getURL(){
        return url;
    }
    public void setURL(String url){
        this.url = url;
    }

}

因此,通过读取文本文件,如果标题前面有冒号,它会将冒号后面的标题文本分配给title类变量。

对不起,我是新的android和Java的一般,任何帮助是感激的。感谢您的阅读!

EN

回答 2

Stack Overflow用户

发布于 2019-10-28 20:58:51

我找到了一个解决方案。

代码语言:javascript
复制
        InputStream input = getResources().openRawResource(R.raw.news_items);
        String _final="";
        Scanner scanner = new Scanner(input);
        while(scanner.hasNext()){
            String line = scanner.nextLine();

            String[] pieces = line.split(":",2);
            _final+=pieces[1]+"\n";
        }

首先,我从raw目录中获取原始文本文件,并将其存储在InputStream输入变量下。

之后,我将InputStream变量传递到一个扫描器变量中,根据我的理解将其作为文本文件读取,如果我错了,请纠正我!

在while循环中,虽然它不是文件结束(EOF),但是获取文本行。在冒号(:)处拆分它,因为我还想得到Web URL,所以在冒号的第一个实例处拆分,因此.split(":",2)中的2。

最后,添加_final文本变量,这纯粹是为了测试。我可以修改它,以便将这些变量传递到类变量中。

票数 0
EN

Stack Overflow用户

发布于 2019-10-28 21:02:16

在我看来,你的问题由两部分组成。

First one是从安卓存储中读取文件,

的第二个是读取文本并解析成类对象的数组/列表。

对于first part,我建议查看下面的stackoverflow答案:

How can I read a text file in Android?

对于第二部分,使用以下代码片段:

代码语言:javascript
复制
    String fileContents = "category:AI\n" +
            "photo:ai4.png\n" +
            "title:'I will destroy humans': Humanoid AI robot Sophia gets Saudi citizenship\n" +
            "website:https://www.deccanchronicle.com/lifestyle/viral-and-trending/111117/i-will-destroy-humans-humanoid-ai-robot-sophia-gets-saudi-citizenship.html\n" +
            "date:11-11-2017\n" +
            "category:cybersecurity\n" +
            "photo:cyber3.png\n" +
            "title:WhatsApp and Telegram media files aren't so secure\n" +
            "website:https://www.theverge.com/2019/7/15/20692184/whatsapp-telegram-media-files-android-messaging-encryption\n" +
            "date:15-07-2019";
    String[] arrayOfContents = fileContents.split("\n");
    List<Link> arrayOfLinks = new ArrayList<>();
    boolean isFirstSection = true;
    Link link = new Link();

    for (String content : arrayOfContents) {
        String[] splitVal = content.split(":");

        switch (splitVal[0].toLowerCase()) {
            case "category":
                if (isFirstSection) {
                    isFirstSection = false;
                } else {
                    arrayOfLinks.add(link);
                }
                link = new Link();
                link.setCategory(splitVal[1]);
                break;
            case "date":
                link.setDate(splitVal[1]);
                break;
            case "photo":
                link.setPhoto(splitVal[1]);
                break;
            case "title":
                link.setTitle(splitVal[1]);
                break;
            case "website":
                link.setWebsite(splitVal[1]);
                break;
            default:
                break;
        }
    }
    arrayOfLinks.add(link);

fileContents变量将实际具有您从存储中读取的文本文件内容。

另外,下面是Class Link,它将在最后保存所有数据:

代码语言:javascript
复制
public class Link {

private String Category;
private String Photo;
private String Title;
private String Website;
private Date Date;

public Link() {
}

public void setCategory(String category) {
    Category = category;
}

public void setPhoto(String photo) {
    Photo = photo;
}

public void setTitle(String title) {
    Title = title;
}

public void setWebsite(String website) {
    Website = website;
}

public void setDate(String date) {
    try {
        Date = new SimpleDateFormat("dd-MM-yyyy").parse(date);
    } catch (Exception e) {
        Date = null;
    }
}}

最后,您将在arrayOfLinks变量中获得完整的数据。

希望这能解决你的问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58590720

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档