如何拆分包含 String 和 Int 的文本并存储到 ArrayList 中?
Posted
技术标签:
【中文标题】如何拆分包含 String 和 Int 的文本并存储到 ArrayList 中?【英文标题】:How to split a text that contains String and Int and store into an ArrayList? 【发布时间】:2016-03-24 04:27:09 【问题描述】:所以基本上我有一个使用BufferedReader
读取txt 文件的java 程序。
文本文件包含有关电影的所有信息。第一列是代码,第二列是标题,第三列是评分。 例如
1 Titanic 44
34 Avengers 60
2 The Lord of the Rings 100
所以 1 是代码,泰坦尼克号是标题,44 是等级等。
我的问题是我做了一个类 Movie(int code, String title, int rating)
我想在那里存储所有信息,但我不知道如何拆分文本。 split(" ")
似乎无法处理标题嵌入空格的情况(例如指环王)。
我真正需要的是能够根据空格去除第一个和最后一个字段作为分隔符,并将所有其他内部空格视为标题的一部分,而不是作为分隔符。
【问题讨论】:
向我们展示您的尝试... 仅仅因为你不知道你将从split(" ")
得到的数组的大小并不意味着你不能使用它。这只是意味着您必须检查数组的长度,而不是假设一个恒定的长度。
我投票结束这个问题,因为"Questions asking for homework help must include a summary of the work you've done so far to solve the problem, and a description of the difficulty you are having solving it."
@nicomp 不,不是这样,这让作业很臭。我可以帮助那些已经表现出一些努力的学生,但我不会解决唯一的问题,这可能是作业的重点
@nicomp 你是不是真的想告诉我他武断地决定自己想出这个练习?!好的运动。
【参考方案1】:
你是对的,你已经尝试过的split
是不合适的。根据您显示的模式,分隔符似乎是每行中的第一个和最后一个空格,它们之间的所有内容都是标题。我建议找到这些空间的索引并使用substring()
。
例如:
String text = "2 The Lord of the Rings 100";
int firstSpace = text.indexOf(' ');
int lastSpace = text.lastIndexOf(' ');
String codeText = text.substring(0, firstSpace);
String title = text.substring(firstSpace, lastSpace);
String ratingText = text.substring(lastSpace);
【讨论】:
我的问题是我必须将信息放在类型为“Movie(int code, String title, int rating)”的 ArrayList 中(类似于:“ArrayListInteger.parseInt(codeText);
获取code
。然后调用Movie
构造函数,制作一个Movie
对象
你是一个有耐心的人,@ManosNikolaidis。祝福你。
@ErickG.Hangstrom 如果我不问这些愚蠢的问题,我应该如何学习? :)
最好先修剪该字符串。 :)【参考方案2】:
你可以使用 split(" ") 使用
String[] foo = split(" ")
foo 中的第一个元素将是第一个整数。将其转换为整数类型。然后逐步遍历其余元素并将它们附加到一个字符串中,除了 foo 中的最后一个元素,它将是您的最后一个整数,您可以将其转换为整数类型。
【讨论】:
【参考方案3】:你可以试试你提到的这个我不能使用 split(" ") 因为某些标题(例如指环王)的标题之间有空格。
String str = "2 The Lord of the Rings 100";
String[] arr = str.split("\\s+");
List<String> list = Arrays.asList(arr);
获取arr
的数据
String code = arr[0];
String rate = arr[arr.length-1];
String title = "";
for (int i = 1; i < arr.length-1; i++)
title += arr[i]+" ";
运行代码
System.out.println("code = " + code);
System.out.println("rate = " + rate);
System.out.println("title = " + title);
结果如下:
code = 2
rate = 100
title = The Lord of the Rings
希望对您有所帮助...
【讨论】:
【参考方案4】:查看带有模式的 Regexp 和 Matcher 类:(\d*)\s(.*)\s(\d*)
编辑:示例
@Test
public void testRegExp()
String text = "2 The Lord of the Rings 100";
String patternString = "(\\d*)\\s(.*)\\s(\\d*)";
Pattern pattern = Pattern.compile(patternString);
Matcher matcher = pattern.matcher(text);
while (matcher.find())
System.out.println("CODE : " + matcher.group(1));
System.out.println("TITLE : " + matcher.group(2));
System.out.println("RATE : " + matcher.group(3));
【讨论】:
【参考方案5】:String line = "1 Titanic 44";
int code = Integer.valueOf(line.split(" ")[0]);
String title = line.split(" ")[1];
int rank = Integer.valueOf(line.split(" ")[2]);
【讨论】:
不处理嵌入空格的标题。以上是关于如何拆分包含 String 和 Int 的文本并存储到 ArrayList 中?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 javascript 拆分字符串 - 将名字和姓氏与文本框分开