Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/202.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android-循环多行文本文件,从冒号后的类别中提取数据,并存储在类变量中_Java_Android - Fatal编程技术网

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

Java Android-循环多行文本文件,从冒号后的类别中提取数据,并存储在类变量中,java,android,Java,Android,我试图从我的原始目录中的原始文本文件中提取数据,方法是读取它并获取冒号后面的字符串(前面有一个类别),然后将其存储在一个类变量中。原始文本文件如下所示: 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

我试图从我的原始目录中的原始文本文件中提取数据,方法是读取它并获取冒号后面的字符串(前面有一个类别),然后将其存储在一个类变量中。原始文本文件如下所示:

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
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;
    }

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

课程安排如下:

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
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一般来说都是新手,非常感谢您的帮助。谢谢你的阅读

我找到了解决办法

        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";
        }
首先,我从原始目录获取原始文本文件,并将其存储在InputStream输入变量下

之后,我将InputStream变量传递到一个Scanner变量中,以文本文件的形式读取该变量,请纠正我的错误

在while循环中,当它不是文件结尾(EOF)时,获取文本行。 在冒号(:)处拆分,因为我也想获得Web URL,所以在冒号的第一个实例处拆分,因此在
中拆分为2。拆分(“:”,2)


最后,将它附加到_finaltext变量,这纯粹是为了测试。我可以修改它,通过一些努力将这些变量传递到类变量中。

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

首先从Android存储读取文件,然后
第二步是读取文本并解析为类对象的数组/列表

对于第一部分,我建议查看以下stackoverflow答案:

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

    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);
最后,您将在arrayOfLinks变量中获得完整的数据


希望这能解决您的疑问。

@Andy我已经解决了!你可以在下面看到我的答案,请指出是否可以改进。谢谢你回复@Swapnil。如果当前链接类已经填充了类变量,那么您可以解释添加新链接类的机制吗?我不太明白那部分。比如,假设链接类已填充,那么下一个链接类是如何实例化的?因此,每次循环遇到以“category”开头的行时,已经实例化的链接类对象将添加到列表中,并实例化一个新的链接类对象。请参见开关盒。