2009-12-30 27 views
9
ya bir tarayıcı için ayırıcı nasıl ayarlarım

; ya da yeni hat? Scanner.useDelimiter(Pattern.compile("(\n)|;")); Ama çalışmıyor: Java Tarayıcı soru

denedim.

+0

Hata bulundu, kullanmam gerekiyor (\ r \ n) |; Böyle bir şeyi ayrıştırıyordum: string, number \ r \ n ... ve bir sayı olarak 100 \ r gibi bir şey almadı. – Razvi

cevap

15

Genel kural olarak, desenlerde, \'u iki katına çıkarmanız gerekir.

Yani,

Scanner.useDelimiter(Pattern.compile("(\\n)|;"));` 

veya

Scanner.useDelimiter(Pattern.compile("[\\n;]"));` 

Edit deneyin: \r\n sorun ise, bu denemek isteyebilirsiniz:

Scanner.useDelimiter(Pattern.compile("[\\r\\n;]+")); 

eşleşir bir veya daha fazla \r, \n ve ;.

Not: Bunları denemedim.

+1

Her iki tarafa da gidebilirsiniz. İki ters eğik çizgi kullanırsanız, regex derleyicisi '\ n' görür ve bunu bir satır besleme için kaçış dizisi olarak yorumlar. Bir ters eğik çizgi kullanırsanız, regex derleyicisi gerçek anlamıyla eşleşen gerçek bir satır besleme karakteri görür. Ama ben kesinlikle karakter-sınıfı versiyonu ile giderdim: '' [\\ n;] "' or '" [\ n;] "'; Daha verimli okumak için daha kolay. –

+0

@Alan Moore: Ah, tamam ... Sadece basit bir satır aralığının yanlış yorumlanacağını varsaydım. – Powerlord

1

OP'nin yorumuna bakıldığında, sorun olan farklı bir satırın (\ r \ n veya CRLF) olduğu anlaşılıyor. İşte

mesela (veya arzu olabilir veya olmayabilir) ya biçimde birden çok noktalı virgül ve satır sonları bakacaklarını cevabım,

Scanner.useDelimiter(Pattern.compile("([\n;]|(\r\n))+")); 

var şöyle bir giriş dosyası: - Katılıyorum olsa hem benim durumumda çalıştı

1 


2;3;;4 
5 

Normal \ n ve \\ n çalıştı 1,2,3,4,5

neden olacaktır Eğer normal ters eğik çizgi gerekiyorsa bunun bir kaçış karakteri olarak da ikiye isterim. Bu durumda, bu durumda "\ n", "ya da 'ekstra' \ '

9

ile istenen karakter olur. Daha önce keşfettiğiniz gibi, DOS/ağ stili \r\n (CRLF) satır ayırıcılarını aramanız gerekiyordu. Unix stili \n (yalnızca LF) yerine. Peki ya metin her ikisini de içeriyorsa? Bu çok olur; Aslında, bu sayfanın kaynağını gördüğümde her iki çeşidi de görüyorum.

Her iki tür ayırıcının yanı sıra eski Mac stili \r (yalnızca CR) aramanın alışkanlıklarına da girmelisiniz.

\r?\n|\r 

almak için örnek kod içine takma: Bu, bir defada tam olarak bir yeni satır veya noktalı virgül eşleştirmek istediğiniz üstleniyor

scanner.useDelimiter(";|\r?\n|\r"); 

İşte bunu bir yolu.Eğer birini veya daha fazla eşleşme istiyorsanız bunun yerine bunu yapabilirsiniz:

scanner.useDelimiter("[;\r\n]+"); 

Bildirimi de, bunu yerine Pattern regex dizede nasıl geçtiğini; Tüm regex'ler otomatik olarak önbelleğe alınır, bu nedenle regex'i önceden derlemek size herhangi bir performans artışı getirmez.