2013-05-20 3 views
2

Я пытаюсь удалить точку только с конца каждого слова в заданном тексте. (В Java) , например:regex удалить точку с конца каждого слова в тексте

input: java html. .net node.js php. 
output: java html .net node.js php 

благодаря

+0

Вы можете показать свой код до сих пор? –

+0

И что вы пробовали? – fge

+2

'.' - специальный символ в регулярном выражении. Бегите так, как ''. 'Так для слов, заканчивающихся. '/ \ w \ ./ gi' –

ответ

1
for(String str : input.split(" ")) 
{ 
    if(str.charAt(str.len - 1) == '.') 
     str = str.substr(0, str.len - 2); 

    //do something with str 
} 

Я хотел бы избежать регулярных выражений, если это вообще возможно, поскольку они гораздо медленнее.

+4

Вы знаете, что два' .' удалены из примера? – Qtax

+0

* «Я пытаюсь удалить точку только с конца ** каждого слова ** в заданном тексте». * Возможно, ваш ответ должен упомянуть о предшествующем расщеплении ввода в словах. – afsantos

+0

@Qtax Ах, я предположил, что это было одно слово ввода по какой-то причине. Я добавлю цикл, чтобы пройти через все введенные строки. – thatidiotguy

3

В зависимости от определения слова можно заменить:

(\w)\.(?!\S) 

с $1. Который удалит все . в конце слова, за которым следует пробел или конец строки.

2

Вы можете сделать:

String repl = "java html. .net node.js php.".replaceAll("\\.(?!\\w)", ""); 

// java html .net node.js php 
+0

@EitanPerkal: Это работало для вас? – anubhava

+1

Я тестировал на примере использования OPs, и он отлично работает. Работает и для моих нужд. Хороший ответ! –

0

Если вы собираетесь использовать регулярное выражение, я бы рекомендовал using a word boundary.

\.\B 

Это соответствует буквальной точке в конце границы слова.

0

развернутого решения, основанное на ответе Qtax в:

String s = "java html. .net node.js php."; 
System.out.println(s); 
s = s.replaceAll("(\\w)\\.(?!\\S)", "$1"); 
System.out.println(s); 

Выход:

java html .net node.js php 
Смежные вопросы