2013-02-13 67 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參數是正則表達式正則表達式,|具有特殊的意義(或)。