2013-02-13 115 views
0

这个代码好像是坏了,但我不知道为什么:简单string.split()了可怕的错误

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

    } 

回答

6

String.split使用正则表达式,所以你需要躲避管|,这是一个特殊的字符(意味着OR):

String args[] = line.split("\\|"); 

而且打印String阵列输出,而所述Object.toString表示,你将需要:

System.out.println(Arrays.toString(candidatArgs)); 
4

要么你需要躲避pipe或将拆分使用一个字符类中,如String#split需要一个正则表达式,而|是一个正则表达式中的元字符。因此,改用此:

String args[] = line.split("\\|"); 

或:

String args[] = line.split("[|]"); 

原因字符类的工作原理是因为,一个字符类中,TE元字符没有特殊的意义。所以,管道只是一个管道,而不是一个交替字符。

除此之外,您应该使用Arrays#toString方法来打印您的数组。

1

变化:

String args[]   = line.split("\\|"); 

|将无法​​工作,因为split参数是正则表达式正则表达式,|具有特殊的意义(或)。