2016-03-30 13 views
1

Heyo. Bir dizede bir isim arayan bir kod oluşturmaya çalışıyorum ve sadece işaretler. Örneğin, bir isim "Jerry Smith" verilmişse ve bir pasaj ya da cümle verildiğinde "Jerry Smith'in bazı ağaçların kokusunu gördüm."Java'da bir dizenin etrafında işaretçiler nasıl yerleştirilir?

O dönecekti "Jerry Smith [/ ADI] bazı ağaçları kokusu [NAME] gördü

Bunu sadece aşağıdaki bunu yapmak mümkün olacağını kaydetti.

public void markNames(String name, String text) 
    { 
     String replacementStr = "[NAME]" + name + "[/NAME]"; 
     String replacedStr = text.replaceAll(name, replacementStr); 
     text = replacedStr; 
    } 

Ama bu Sonunda bir şey yapmıyor, eminim ki daha karmaşık bir regex'e ihtiyacım var ama dürüstçe ne koyacağımı bilmiyorum. Sadece ismi bulmak için yeterince basit olacağını düşündüm.

Şunlar için teşekkürler Yardım

+0

sembolü [% s] kullanmak gerektiğini düşünüyorum? – Tacocat

+2

kullanın değiştirin değiştirinAll –

+1

@Tacocat opps afedersiniz. metin olmalı. Değiştirdim ve hala çalışmıyor. Ya da çalışmayan – Cinnamonsicks

cevap

0
Değişim

bu iki satır: Buna

String replacementStr = "[NAME]" + name + "[/NAME]"; 
String replacedStr = textBlock.replaceAll(name, replacementStr); 

:

String replacementStr = "[NAME]$1[/NAME]"; 
String replacedStr = textBlock.replaceAll("("+name+")", replacementStr); 

bu

replaceAll() Regexes kullanır çalışır Neden. Parantez name etrafında ekleyerek, bir yakalama grubu haline gelir. Bu yakalama grubuna, yerine $1 olarak başvuruyorum. [MarkNames] yönteminde, [textBlock] değişkeninin bulunduğu yerdeki

+0

Çok teşekkür ederim. Bu bir çekicilik gibi çalıştı. – Cinnamonsicks

1

; yüzden, ben

public String markNames(String name, String text) { 
    String replacementStr = "[NAME]" + name + "[/NAME]"; 
    String replacedStr = text.replaceAll(name, replacementStr); 
    return replacedStr; 
} 

sonra, ben sonuç istediğiniz edilir juint testini o

@Test 
public void test15(){ 
    System.out.println(markNames("Jerry Smith", "I saw Jerry Smith smell some trees.")); 
} 

Bu kod çıkışları I saw [NAME]Jerry Smith[/NAME] smell some trees. Bu, kullanılan size yöntem değiştirdi? `TextBlock` dan nerede: ve ben` textBlock.replaceAll` yerine +

String replacementStr = String.format("[NAME]%s[/NAME]", name); 
İlgili konular