2014-02-01 4 views
2

Мне нужно создать программу, в которой пользовательский шаблонный шаблон выполняет следующие действия. Я знаю, что для этого нужно создать регулярное выражение. Пожалуйста, помогите мне создать шаблон для этого: - Если у меня есть пункт, мне нужно сделать следующее:Назначение шаблона Java-шаблона


a) if the number of letters in a word is greater than 3, then it should be changed to first three characters + $. For example, the word "Maradona" should be changed to "Mar$". If the number of letters is less than or equal to 3, leave it as it is. Numbers are not counted as letters. So 
    "$16.9m." should not be changed. 

b)Punctucation should be intact(Except if it is in the word. ie "tournament's" should be "tou$"). - Eg: history, -> his$, 

c) "/n/n" is for line termination. It shouldn't be changed. 

Для: -

Марадона является единственным футболистом, чтобы установить мировой рекорд контрактных сборов дважды, во-первых, при переходе в Барселону за мировой рекорд 5 миллионов фунтов стерлингов, а во-вторых, когда он перешел в Неаполь за еще одну рекордную плату в размере 16,9 миллиона долларов. За свою профессиональную карьеру в клубе Марадона играл за «Аргентинские юниоры», «Бока Хуниорс», «Барселона», «Неаполь», «Севилья» и «Старые мальчики Ньюэлла». На клубном уровне он наиболее известен своей карьерой в Неаполе, где он получил многочисленные награды. В своей международной карьере, сыграв за Аргентину, он заработал 91 шапку и забил 34 гола. /n/n Он сыграл в четырех турнирах чемпионата мира ФИФА, включая турнир 1986 года, где он капитан Аргентины и привел их к победе над Западной Германией в финале, выиграв премию «Золотой мяч» в качестве лучшего игрока турнира. В том же четвертьфинальном туре турнира он забил оба гола в 2-1 победе над Англией, которая вошла в историю футбола, хотя по двум разным причинам. Первый гол состоялся с помощью непрославленного гандбола, известного как «Рука Бога /», а второй гол последовал за 60 м (66 м) балов мимо пяти игроков в Англии./N/n/"The The Century of the Century/присужден Марадоны избирателей FIFA.com в 2002

Вывод должен быть: -

Mar $ является ОНЛ $ Foo $ установить УНР $ против $ плата за $ Twi $, пихта $ Whe $ тра $ до Bar $ за $ wor $ rec $ £ 5m, а sec $, whe $ tra $ до Nap $ за $ an $ $ $ $ 16.9m. Dur $ his pro $ clu $ car $ Mar $ pla $ для Arg $ Jun $, Boc $ Jun $, Bar $, Nap $, Sev $ и New $ Old Boy $. В clu $ lev $ он является mos $ fam $ за свой автомобиль $ в Nap $ whe $, он выиграл num $ acc $. В его int $ car $, pla $ для Arg $, он уха $ 91 cap $ и sco $ 34 goa $./N/nHe pla $ in fou $ FIF $ Wor $ Cup tou $, inc $ 1986 tou $, $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $. В $ sam $ tou $ qua $ rou $ он sco $ bot $ goa $ в $ 2 $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $. Fir $ goa $ был через un $ han $ kno $ как/"Han $ of God /", whi $ sec $ goa $ fol $ 60 м (66 м) dri $ pas $ fiv $ Eng $ pla . $/п/п/"Гоа $ в Сеп $ /" Ава $ к Mar $ на FIF $ воть $ в 2002

Edit Это то, что я пытался до сих пор:

Я пытался сделать это, не используя подход с использованием шаблонов. Просто используя такие условия, как:

String[] split = sentence.split("\\s+"); 
for(int i = 0; i < split.length; i++) 
{ 
    if(split[i].length() > 3) 
    { 
     if(split[i].matches("[a-zA-Z]+")) 
    } 
} 

Но это не похоже на действительный подход.

+0

Что следует 'ABCD é' стать? –

+0

@DavidWallace позвольте мне изменить мое сообщение и объяснить пример, который я получил. Это было задание, которое я не думал об этом – user3259926

+0

@DavidWallace Пожалуйста, проверьте обновленный вопрос – user3259926

ответ

2

Это replaceAll должно работать:

String repl = data.replaceAll("(?<=\\b[a-zA-Z']{3})[\\w']+", "\\$"); 

Объяснение: Это регулярное выражение находит 1 или более слов, символов, которые предшествуют "словораздела и 3-х букв". После обнаружения мы заменяем этот текст литералом $.

Поиск:

(?<=\b[a-zA-Z']{3}) Positive Lookbehind - Assert that the regex below can be matched 
\b assert position at a word boundary 
[a-zA-Z']{3} match a single character present, Exactly 3 times 
a-z a single character in the range between a and z 
A-Z a single character in the range between A and Z 
' is literal single quote 
[\w']+ matches any word character or single quote [`a-zA-Z0-9_] one or more time 

Замена:

\\$ - A literal $ 
1

Попробуйте это:

str = str.replaceAll("(?i)(?<=\\s[a-z']{3})[a-z']+", "\\$"); 
+1

Как это отличает буквы от цифр? (важная часть вопроса) –

+0

@DavidWallace полностью неправильно прочитал вопрос. Сейчас должно быть близко. – Bohemian

+0

Хорошо сделал пятно апострофа. –

Смежные вопросы