Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/330.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 如何拆分字符串并将其存储在列表或映射中?_Java_String_List_Split - Fatal编程技术网

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