У меня есть строка Java "test/this/string"
, которую я хочу изменить на "string/this/test"
, используя регулярное выражение или самый эффективный алгоритм Java. То, как я знаю, - это использовать метод split, цикл над массивом и перестроить строку вручную. Число «/» может меняться и не фиксируется в фиксированном количестве раз. Есть идеи?Java RegEX To Split and Reverse String
ответ
Вот идея, используя lastIndexOf()
:
String str = "string/this/test";
StringBuilder rev = new StringBuilder(str.length());
int start = str.lastIndexOf('/'), end = str.length();
while (start >= 0) {
rev.append(str.substring(start + 1, end));
rev.append('/');
end = start;
start = str.lastIndexOf('/', start - 1);
}
rev.append(str.substring(0, end));
System.out.println(rev);
test/this/string
Это может быть сделано в одной строке, используя регулярное выражение:
String reversed = str.replaceAll("(.*?)(/.*?)?(/.*?)?(/.*?)?(/.*?)?(/.*?)?(/.*?)?(/.*?)?(/.*?)?", "$9$8$7$6$5$4$3$2$1").replaceAll("^/", "");;
Как это работает это регулярное выражение соответствует всю строку и захватывает части как отдельные группы, затем строка замены возвращается к тем захваченным группам, чтобы вернуть их в обратном порядке.
Это работает для 1-9 частей.
Предположительно, количество '/' s не будет известно раньше. – arshajii
@arshajii так не читал. Возможно, ты прав. Если нет, значит, работает. Если да, то нет. Хотя, я сделал его работу на 1-9 частей сейчас. – Bohemian
@Bohemian - части могут быть от 1 до многих ... не фиксированное число. – c12
Вот мое взятие:
String input = "test/this/string";
List<String> list = Arrays.asList(input.split("(?=/)|(?<=/)"));
Collections.reverse(list);
StringBuilder sb = new StringBuilder();
for (String s: list)
sb.append(s);
System.out.println(sb.toString());
(?<=/)
является нулевой длины соответствия регулярное выражение, которое соответствует, если предыдущий символ является /
.
(?=/)
- это регулярное выражение соответствия нулевой длины, которое соответствует, если следующий символ равен /
.
Так (?=/)|(?<=/)
матчи прямо до и после каждого /
, таким образом split
разбивает строку на "test", "/", "this", "/", "string"
.
Test.
- 1. Java Split String and Combine
- 2. java regex split string using regex
- 3. C# Regex Split To Java Pattern split
- 4. RegEx Pattern Help to Split String
- 5. Java split string by regex
- 6. Regex split and replace
- 7. Java Split a String с выражением Regex
- 8. Простая функция java String to Int/Reverse
- 9. Split String To Array
- 10. split string javascript regex
- 11. Regex on string split
- 12. Powershell regex split string
- 13. Split string by regex
- 14. Split string WITHOUT regex
- 15. Regex Java String Split by Single Asterisk
- 16. Java regex split String в массив чисел
- 17. Java regex split string не работает
- 18. Java regex not working - string split
- 19. Java String Split/Manipulation
- 20. Использование regex to split()
- 21. Regex to split id's
- 22. Java to VB.net NullReferenceException on Split String
- 23. java split() метод convert String to Integer
- 24. RegEx - Split string by word
- 25. Javascript string split с regex
- 26. Python regex search AND split
- 27. Regex to Split Полное имя
- 28. Split Java String
- 29. Java Split() to Split Up Math Equation
- 30. split string using java
Что случилось с описанным вами методом? – nhgrif