Java 如何拆分字符串并将其存储在列表或映射中?
我正在尝试读取输入文件,拆分字符串并将其存储在列表或映射中。有人能帮忙吗 我必须将其存储在数据结构(如列表或地图)中,并将其与Java 如何拆分字符串并将其存储在列表或映射中?,java,string,list,split,Java,String,List,Split,我正在尝试读取输入文件,拆分字符串并将其存储在列表或映射中。有人能帮忙吗 我必须将其存储在数据结构(如列表或地图)中,并将其与字符串进行比较。equals函数匹配它(字符串)是否存在于数据结构中 我试过这样的东西。但是在输出中,我得到的是连续的“true”,而不是字符串 public class Main { public static void main(String[] args) throws IOException { FileProcessor readInp
字符串进行比较。equals
函数匹配它(字符串)是否存在于数据结构中
我试过这样的东西。但是在输出中,我得到的是连续的“true”,而不是字符串
public class Main {
public static void main(String[] args) throws IOException {
FileProcessor readInputFile;
readInputFile = new FileProcessor(args[0]);
String line = null;
List<String> result = new ArrayList<>();
while(null != (line = readInputFile.poll())) {
String lines[] = line.split("::|__|,|=|-|\\]|\\[");
System.out.println(result.add(String.valueOf(lines)));
}
}
}
输入:Input.txt
ADD_VIDEO::video1
ADD_VIDEO::video2
METRICS__video1::[VIEWS=1000,LIKES=20,DISLIKES=20]
AD_REQUEST__video1::LEN=8
METRICS__video2::[VIEWS=2000,LIKES=400,DISLIKES=20]
METRICS__video1::[VIEWS=20000,LIKES=1000,DISLIKES=-10]
AD_REQUEST__video2::LEN=39
METRICS__video2::[VIEWS=50,LIKES=-50,DISLIKES=0]
REMOVE_VIDEO::video2
ADD_VIDEO::video3
METRICS__video3::[VIEWS=2000,LIKES=100,DISLIKES=20]
METRICS__video1::[VIEWS=0,LIKES=-1000,DISLIKES=500]
ADD_VIDEO::video4
METRICS__video4::[VIEWS=100,LIKES=5,DISLIKES=0]
REMOVE_VIDEO::video1
AD_REQUEST__video3::LEN=15
REMOVE_VIDEO::video3
REMOVE_VIDEO::video4
预期输出:
ADD_VIDEO
video1
ADD_VIDEO
video2
METRICS
video1
VIEWS
1000
LIKES
20
DISLIKES
20
AD_REQUEST
video1
LEN
8
METRICS
video2
VIEWS
2000
LIKES
400
DISLIKES
20
METRICS
video1
VIEWS
20000
LIKES
1000
DISLIKES
10
AD_REQUEST
video2
LEN
39
METRICS
video2
VIEWS
50
LIKES
50
DISLIKES
0
REMOVE_VIDEO
video2
ADD_VIDEO
video3
METRICS
video3
VIEWS
2000
LIKES
100
DISLIKES
20
METRICS
video1
VIEWS
0
LIKES
1000
DISLIKES
500
ADD_VIDEO
video4
METRICS
video4
VIEWS
100
LIKES
5
DISLIKES
0
REMOVE_VIDEO
video1
AD_REQUEST
video3
LEN
15
REMOVE_VIDEO
video3
REMOVE_VIDEO
video4
true
true
true
true
.
.
.
true
输出获取:
ADD_VIDEO
video1
ADD_VIDEO
video2
METRICS
video1
VIEWS
1000
LIKES
20
DISLIKES
20
AD_REQUEST
video1
LEN
8
METRICS
video2
VIEWS
2000
LIKES
400
DISLIKES
20
METRICS
video1
VIEWS
20000
LIKES
1000
DISLIKES
10
AD_REQUEST
video2
LEN
39
METRICS
video2
VIEWS
50
LIKES
50
DISLIKES
0
REMOVE_VIDEO
video2
ADD_VIDEO
video3
METRICS
video3
VIEWS
2000
LIKES
100
DISLIKES
20
METRICS
video1
VIEWS
0
LIKES
1000
DISLIKES
500
ADD_VIDEO
video4
METRICS
video4
VIEWS
100
LIKES
5
DISLIKES
0
REMOVE_VIDEO
video1
AD_REQUEST
video3
LEN
15
REMOVE_VIDEO
video3
REMOVE_VIDEO
video4
true
true
true
true
.
.
.
true
这里的问题是,您正在打印函数调用的结果
result.add()
。您需要在不同的行上调用result.add()
,并且只调用String.valueOf(line)
或result.get(//上次添加的索引)
,调用system.out
。您也可以在之后循环查看结果
,以获得相同的结果。注意:这不是完整的答案,但它应该可以帮助您解决问题
在print语句中System.out.println(result.add(String.valueOf(lines))
打印add
方法的返回值,而不是解析的字符串值。
尝试打印
结果
。您的拆分工作正常,
问题是您正在打印List.add()返回的布尔值;
result.add返回您正在打印的true。
检查这里
result.add(String.valueOf(lines));
对于输出,您应该打印
System.out.println(lines[0]);
System.out.println(lines[1]);
您可以使用以单行打印此阵列:
System.out.println(Arrays.toString(line));
//[添加视频,视频1,添加视频,视频2,…]
或者,您可以使用打印单独的行:
Arrays.stream(lines).forEach(System.out::println);
//添加视频
//视频1
//添加视频
//视频2
// ...
问题在于,如果列表中是否添加了while循环,则在while循环中进行打印,这将为您提供true或false,您没有打印列表中的元素
public class Main {
public static void main(String[] args) throws IOException {
FileProcessor readInputFile;
readInputFile = new FileProcessor(args[0]);
String line = null;
List<String> result = new ArrayList<>();
while(null != (line = readInputFile.poll())) {
String lines[] = line.split("::|__|,|=|-|\\]|\\[");
result.add(String.valueOf(lines));
}
result.stream().forEach(System.out::println);
}
}
公共类主{
公共静态void main(字符串[]args)引发IOException{
文件处理器readInputFile;
readInputFile=新文件处理器(args[0]);
字符串行=null;
列表结果=新建ArrayList();
while(null!=(line=readInputFile.poll()){
字符串行[]=line.split(“::| | | |,|=|-|\\\]|\\[”;
结果.add(字符串.valueOf(行));
}
result.stream().forEach(System.out::println);
}
}
我会用番石榴“拆分器”来做这项工作:
String line = "METRICS__video1::[VIEWS=1000,LIKES=20,DISLIKES=20]";
List<String> result = Splitter.onPattern("::|__|,|=|-|\\]|\\[").omitEmptyStrings().splitToList(line);
result.forEach(str -> System.out.println(str));
如果您想为所有行列出一个大列表:
List<String> result = new ArrayList<>();
while(null != (line = readInputFile.poll())) {
result.addAll(Splitter.onPattern("::|__|,|=|-|\\]|\\[").omitEmptyStrings().splitToList(line));
}
result.forEach(str -> System.out.println(str));
List result=new ArrayList();
while(null!=(line=readInputFile.poll()){
result.addAll(Splitter.onPattern(“:::| | | | | | |,|=|-| \\\]| \\[”)。省略EmptyString().splitToList(行));
}
result.forEach(str->System.out.println(str));