2015-10-13 11 views
5

Bir metin dosyasından alıyorum bu dizeye sahibim., .split() uygulamasının Java'da nasıl çalıştığını karıştırdı.

"1 normal 1 [(o, 21) (o, 17) (t, 3)]" 

Ben bir dize dizideki 1, normal, 1, o, 21, 17, t, 3 almak istiyorum.

Scanner inFile = new Scanner(new File("input.txt"); 
String input = inFile.nextLine(); 

String[] tokens = input.split(" |\\(|\\)|\\[\\(|\\, |\\]| \\("); 
    for(int i =0 ; i<tokens.length; ++i) 
    { 
     System.out.println(tokens[i]); 
    } 

Çıkış:

1 
normal 
1 

o 
21 


o 
17 


t 
3 

neden alanlarda dizi depolanır vardır. Burada Örneğin

cevap

0

: Bu tek bir boşluk eşleşen ilk adımda

1 [(o 
  1. .
  2. sonraki adım bu iki eşleştirme arasındaki [(

Yani maçları, bir boşluk dize "" döndürülür.

6

Bu boşluk değil, boş dizeler. Sizin dizesidir:

"1 normal 1 [(o, 21) (o, 17) (t, 3)]" 

Bu sizin regexp göre şu şekilde bölünmüş oluyor:

Token = "1" 
Delimiter = " " 
Token = "normal" 
Delimiter = " " 
Token = "1" 
Delimiter = " " 
Token = "" <-- empty string 
Delimiter = "[(" 
Token = "o" 
... end so on 

iki komşu sınırlayıcı görünür, bunların arasına boş bir dize belirteci var olduğunu kabul edilir.

"[ \\(\\)\\[\\,\\]]+" 

Böylece "()[,]" bitişik karakterlerden herhangi sayıda sınırlayıcı olarak kabul edilecektir:

böyle, örneğin, regexp değişebilir Bunu düzeltmek için.

İlgili konular