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”开头的行时,已经实例化的链接类对象将添加到列表中,并实例化一个新的链接类对象。请参见开关盒。