У меня есть строка, такая как s = "abc.def..ghi"
. Я бы хотел заменить сингл '.' с двумя. Однако s.replace(".", "..")
дает «abc..def .... ghi». Как я могу получить правильное поведение? Результат, который я ищу, - s = "abc..def..ghi"
.Замена символов в строке, Java
ответ
Заменить точку только тогда, когда он окружен двумя символами
String foo = s.replaceAll("(\\w)\\.(\\w)", "$1..$2");
Или, как @Thilo прокомментировал, только если он окружен двух не точками
String foo = s.replaceAll("([^.])\\.([^.])", "$1..$2");
И заменить одну точку двумя точками, даже если точка находится в начале/конце t он струна, использовать отрицательный предпросмотр и назад ': (Пример Строка: .abc.def..ghi.
будет ..abc..def..ghi..
)
String foo = s.replaceAll("(?<!\\.)\\.(?!\\.)", "..");
s.replace("...","..");
s.replace("....","..");
В зависимости от входных возможностей ..
Я имею в виду, что он должен использовать их после первого вызова s.replace. Кроме того, ему необходимо наложить некоторый контроль над входным потоком такой строки, иначе парсер в мире не сможет ему помочь. –
Пожалуйста, взгляните на ответ baao и подумайте, хотите ли вы удалить этот ответ. –
Если вы не знаете, как сделать это с помощью регулярных выражений затем использовать StringTokenizer
разделить строку и снова сцепить с ..
.
Код:
public static void main(String[] args) {
String s = "abc.def..ghi";
StringTokenizer s2 = new StringTokenizer(s, ".");
StringBuilder sb = new StringBuilder();
while(s2.hasMoreTokens())
{
sb.append(s2.nextToken().toString());
sb.append("..");
}
sb.replace(sb.length()-2, sb.length(), ""); // Just delete an extra .. at the end
System.out.println(sb.toString());
}
Я знаю, что код является большим по сравнению с одной строкой регулярного выражения, но я отправил его в случае, если у вас возникли какие-либо проблемы с регулярным выражением. Если вы считаете, что это медленнее, чем принятый ответ, я сделал время начала и окончания с System.currentTimeMillis()
, и я получил свою скорость быстрее. Я не знаю, есть ли исключения для этого теста.
В любом случае, я надеюсь, что это поможет.
Я не думаю, что это работает, если у вас есть три последовательных точки (хотя, если быть справедливым, ожидаемое поведение недоказано , Я предполагаю, что вы хотите сохранить их как три точки, а не превращать их в две точки). – Thilo
@Thilo Я пробовал точки со стартом, концом и несколькими точками (> 3) между ними. Это сработало. – SkrewEverything
@Thilo это 'a..b' – SkrewEverything
Используйте взгляд обходные:
str = str.replaceAll("(?<!\\.)\\.(?!\\.)", "..")(
Регулярное выражение читает как «точка, не предшествует точка, а не с последующей точкой». Это будет обрабатывать граничные случаи точки, находящейся в начале/конце и/или окруженной буквально любым другим символом.
Поскольку внешний вид не потребляет входные данные, вам не нужно садиться с обратной ссылкой на заменяющий термин.
- 1. Java: замена символов в строке
- 2. Java - Замена символов в строке
- 3. замена определенных символов в строке в Java
- 4. Замена символов в строке в Java
- 5. замена символов в строке
- 6. Замена символов в строке
- 7. Замена символов в строке
- 8. Повторная замена символов в строке
- 9. Замена нескольких символов в строке
- 10. C# - Замена символов в строке
- 11. Замена символов пробелами в строке
- 12. Замена нескольких символов в строке
- 13. Замена символов в строке символов указателя C++?
- 14. Замена символов в строке в C++
- 15. Замена определенных символов в строке в python
- 16. Замена определенных символов в Java
- 17. java символов в строке
- 18. XSLT: Замена нескольких символов в строке
- 19. Замена всех символов в яваскрипта строке
- 20. Замена символов не алфавита в строке
- 21. Замена символов в строке с другой строкой
- 22. Пакетный поиск и замена символов в строке
- 23. Замена символов в строке - я прав?
- 24. Самая быстрая замена символов в строке
- 25. Замена символов в строке с номером
- 26. Замена всех символов в строке разными символами
- 27. Замена неизвестных символов в строке Python 2.7
- 28. JQuery замена специальных символов в строке
- 29. Замена определенных символов в строке - JavaScript
- 30. Python 2: замена символов в строке
Можете ли вы порекомендовать хороший ресурс «начать работу с регулярным выражением»? – Adam
Я знаю, что http://www.regular-expressions.info/ неплохо, хотя это выглядит не очень красиво. Но вы найдете там очень много. Взгляд/отставание объясняется здесь: http://www.regular-expressions.info/lookaround.html @Adam – baao