这段代码似乎被打破了,但我不知道为什么:
System.out.println(line);
// prints: Some Name;1|IN03PLF;IN02SDI;IN03MAP;IN02SDA;IN01ARC
String args[] = line.split("|");
String candidatArgs[] = args[0].split(";");
String inscrieriString[] = args[1].split(";");
System.out.println(args[0]);
System.out.println(args[1]);
System.out.println(candidatArgs);
System.out.println("[0]:" + candidatArgs[0]);
System.out.println("[1]:" + candidatArgs[1]);
// prints: S
// [Ljava.lang.String;@4f77e2b6
// [0]:
我不知道为什么会这样。按我的逻辑:
String args[] = line.split("|");
[0]: Some Name;1
[1]: IN02SDI;IN03MAP;IN02SDA;IN01ARC
而不是:
[0]: S
如果你想要更多的代码:这应该编译,即使它没有做太多的事情(删除尽可能多的不必要的代码)
主要
有一个文件: Candidati.txt
包含: Some Name;1|IN03PLF;IN02SDI;IN03MAP;IN02SDA;IN01ARC
import java.util.ArrayList;
Repository repository = new Repository ("Candidati.txt"); // file name
ArrayList<Candidat> candidati = repository.getCandidati();
System.out.println(candidati);
存储库
import java.util.ArrayList;
public class Repository {
private String fisierCuCandidati;
private ArrayList<Candidat> listaCandidati;
public Repository (String fisierCuCandidati) {
this.fisierCuCandidati = fisierCuCandidati; // file name
this.listaCandidati = new ArrayList<Candidat>();
this.incarcaCandidati();
}
public void incarcaCandidati() {
FileReader in = null;
BufferedReader input = null;
//try {
in = new FileReader (this.fisierCuCandidati);
input = new BufferedReader (in);
String line;
while ((line = input.readLine()) != null) {
System.out.println(line);
String args[] = line.split("|");
String candidatArgs[] = args[0].split(";");
String inscrieriString[] = args[1].split(";");
System.out.println(args[0]);
System.out.println(args[1]);
System.out.println(candidatArgs);
System.out.println("[0]:" + candidatArgs[0]);
System.out.println("[1]:" + candidatArgs[1]);
}
}
Candidat
public class Candidat {
public Candidat (String nume) {
}
public Candidat (String nume, int id) {
}
答案 0 :(得分:7)
String.split
使用正则表达式,因此您需要转义管道|
,这是一个特殊字符(意思是 OR ):
String args[] = line.split("\\|");
同样要打印String
数组输出而不是Object.toString
表示,您需要:
System.out.println(Arrays.toString(candidatArgs));
答案 1 :(得分:4)
您需要转义pipe
或在分割中的字符类中使用它,因为String#split
采用正则表达式,|
是正则表达式中的元字符。所以,请改用它:
String args[] = line.split("\\|");
或:
String args[] = line.split("[|]");
字符类的工作原因是因为在字符类中,元字符没有特殊含义。因此,管道只是一个管道,而不是交替字符。
除此之外,您应该使用Arrays#toString
方法打印阵列。
答案 2 :(得分:1)
更改为:
String args[] = line.split("\\|");
您的|
无法正常运行,因为split
的参数是正则表达式,|
在正则表达式中具有特殊含义(或)。
答案 3 :(得分:1)
|
是java正则表达式中的特殊字符,因此您需要像\\|
一样转义它。我一般都这样做
line.split(Pattern.quote(separator))
其中Pattern为http://docs.oracle.com/javase/1.4.2/docs/api/java/util/regex/Pattern.html,而分隔符是您使用的任何分隔符。这会自动处理转义的特殊字符。