2010-09-21 3 views
27

ne zaman kullanılması gerektiğini Geçenlerde regex kullanarak henüz bunu anlayabilmem kodumda düzgün bir şekilde. Ayrılmış bir sekme str örneği verildiğinde, str.split("\t") kullanıyordum. Şimdi bunun yanlış olduğunu ve sekmeleri eşleştirmek için str.split("\\t") kullanmam gerektiğini anlıyorum. Başka bir şey için düzenli ifade desenleri arıyordu olarakanlama regex: bölünmüş ("\ t") vs bölünmüş (" t") - zaman ikisinin de çalışması yapmak ve onlar

Ancak, saf tesadüfen bu gerçeği tökezlemek olur. Görüyorsunuz, hatalı kod split("\t") benim durumumda gayet iyi çalışıyordu ve şimdi sekme karakterini eşleştirmek için bir regex bildirmek için yanlış bir yol olup olmadığını neden işe yaradığı konusunda kafam karıştı. Bu nedenle, aslında regex'in Java'da nasıl işlendiğini anlamak uğruna, sadece Eclipse'e kod kopyalamak yerine ve neden işe yaradığını anlamak yerine ...

Benzer bir şekilde bir parçaya geldim. Yalnızca sekmeyle ayrılmış değil, aynı zamanda virgülle ayrılmış metin. Daha açık bir ifadeyle, ayrıştırdığım sekmeyle ayrılmış listeler bazen "bileşik" gibi görünen öğeler içerir: item1,item2,item3 ve bunları basitlik uğruna ayrı öğeler olarak ayırmak istiyorum. Bu durumda uygun regex ifadesi olmalıdır: line.split("[\\t,]"), ya da ben de burada yanılıyorum? peşin

sayesinde

+0

Yani listesidir sekmesi ve virgül hem ayrılmış ama bazen sekmeleri ayırıcıları değil mi? – Gumbo

+0

iyi ... hayır. Sekme ile ayrılmış tanımlayıcıların listesidir, ancak öğeler arasında virgülle ayrılmış bazı çiftler/üçüzler vardır. Bkz: http://www.pathwaycommons.org/pc/webservice.do?version=2.0&cmd=get_record_by_cpath_id&q=767212&output=gsea&output_id_type=UNIPROT – posdef

+0

bu soru da ilgili ve yararlı olan. Onları kontrol edin [https://stackoverflow.com/questions/1635764/string-parsing-in-java-with-delimeter-tab-t-using-split](here) – Bouramas

cevap

37

"\t" kullanarak, escape sequence\t karakteri + 0009 U ile Java ile değiştirilir. "\\t"'u kullanırken, 'un çıkış sırası, \ ile Java ile değiştirilir, bu da \t ile sonuçlanır ve sonuç regular expression ayrıştırıcısı tarafından U + 0009 karakteri olarak yorumlanır.

Yani hem gösterimler doğru yorumlanacak. Sadece ilgili karakterle değiştirildiği zaman sorusu.

+0

yüzden kullanmak için "yanlış" olarak kabul edilir nasıl oluyor sekme ile ayrılmış bir dizeyi ayrıştırmak için bölme ("\ t") ' – posdef

+0

@posdef Bu mu? \ t Sekme karakteri ('\ u0009'), Oracle referansının sekme ifadesi için size söyleyeceği şeydir. aslında oracle referansı bir '\ t 'de kullanılacağını anlatır - http://download.oracle.com/javase/1.4.2/docs/api/java/util/regex/Pattern.html#sum – InsertNickHere

+2

@InsertNickHere gör dizi. Bu String bir hazır bilgi ile verilirse, ters eğik çizgiyi ikiye katlamanız gerekir, sonraki paragrafa bakın: http://download.oracle.com/javase/1.4.2/docs/api/java/util/regex/Pattern.html #bs ancak referans ayrıca 'x' karakterini 'x' için kullanabileceğinizi de söyler, bu yüzden "\ t" veya "\ u0009" –

0

\ böylece sekmeyi göstermek için \ ve t ile \ kaçmak için gereken doğru regex almak için, java konusu toprağa kaçış olarak kabul olduğunu.

This öğretici yardımcı olacak daha

+0

Cevabınız için teşekkür ederim, yine de orijinal soruyu tekrar okumalısınız diye düşünüyorum ... Zaten regex ve kaçmak için doğru yolu öğrendiğimi belirtmiştim. Sorum şu: "yanlış" regex hala işe yaradı. Bu arada, öğretici okumadan sonra soruyu yayınladım ... – posdef

+1

Java, bazı özel karakterleri belirtmek için kaçış char vardır. Yeni satır, ters eğik çizgi, sekme vb. Yani (\\ t == \ t) ve (\ t = tab char). Ama regex'in dahili olarak sekme ile nasıl ilgileneceğinden emin değilim. –