Заменить последнюю часть строки
Я хочу заменить последнюю строку, которая является ,
с )
Предположим, что строка:
Вставить в двойное (имя, дата,
для преобразования в:
Вставить в двойное (имя, дата)
Ответы
Ответ 1
Следующий код должен заменить последнее вхождение ','
на ')'
.
StringBuilder b = new StringBuilder(yourString);
b.replace(yourString.lastIndexOf(","), yourString.lastIndexOf(",") + 1, ")" );
yourString = b.toString();
Примечание. Это вызовет исключения, если String
не содержит ','
.
Ответ 2
Вы можете использовать регулярное выражение:
String aResult = "Insert into dual (name,date,".replaceAll(",$", ")");
replaceAll(...)
будет соответствовать строковой строке с заданным регулярным выражением (параметр 1) (в этом случае мы сопоставляем последний символ, если он является запятой). Замените его заменой (параметр 2) (в данном случае это ")
" ).
Плюс! Если вы хотите убедиться, что хвосты и вкладки позаботятся, вы можете просто изменить регулярное выражение на ",\[ \t\]*$
". ПРИМЕЧАНИЕ '\[
' и '\]
' не имеет обратной косой черты (я не знаю, как правильно ее избежать).
Надеюсь, что это поможет.
Ответ 3
Это настраиваемый метод для замены только последней подстроки заданной строки. Это было бы полезно для вас:
private String replaceLast(String string, String from, String to) {
int lastIndex = string.lastIndexOf(from);
if (lastIndex < 0) return string;
String tail = string.substring(lastIndex).replaceFirst(from, to);
return string.substring(0, lastIndex) + tail;
}
Ответ 4
str = str.substring(0, str.lastIndexOf(",")) + ")";
Ответ 5
Более читаемый способ... Что вы можете использовать, чтобы узнать о String и его функциях
String myString = "Insert into dual (name,date,";
String newString = "";
int length = myString.length();
String lastChar = myString.substring(length-1);
if (lastChar.contains(",")) {
newString = myString.substring(0,length-1) + ")";
}
System.out.println(newString);
Ответ 6
Проверьте длину строки, проверьте последний char (если у вас есть длина, это легко)
и замените его - при необходимости.
Это решение не работает. конкретный. просто используйте здравый смысл.
Ответ 7
Попробуйте это регулярное выражение (^.+)b(.+$)
Пример (замените последний символ b)
System.out.println("1abchhhabcjjjabc".replaceFirst("(^.+)b(.+$)", "$1$2"));
Ответ 8
Замените последнюю char вашей строки на )
str = str.substring(0, str.length()-1)+")";
Убедитесь, что ваша строка не пустая или нулевая.
Ответ 9
На подобный поиск я нашел этот ответ:
fooobar.com/questions/377692/...
Я думаю, что это лучший, потому что он использует Java-методы, как задумано, а не пытается заново изобрести колесо. По сути, он читает строку в обратном направлении и использует метод replaceFirst объекта String, это именно то, что я искал.
Вот документация по методу String replaceFirst и функции реверса StringBuffer: https://docs.oracle.com/javase/8/docs/api/java/lang/String.html#replaceFirst-java.lang.String-java.lang. String-
https://docs.oracle.com/javase/8/docs/api/java/lang/StringBuffer.html#reverse--
Вот как я реализовал это, чтобы просто удалить некоторые HTML-теги "pre" из фрагмента кода, который я хотел интерпретировать. Не забудьте также перевернуть строку поиска, а затем вернуть все обратно к обычным послесловиям.
private String stripHtmlPreTagsFromCodeSnippet(String snippet) {
String halfCleanSnippet = snippet.replaceFirst("<pre>", "");
String reverseSnippet = new StringBuffer(halfCleanSnippet).reverse().toString();
String reverseSearch = new StringBuffer("</pre>").reverse().toString();
String reverseCleanSnippet = reverseSnippet.replaceFirst(reverseSearch, "");
return new StringBuffer(reverseCleanSnippet).reverse().toString();
}
Ответ 10
Используйте функцию Apaches StringUtils removeEnd():
StringUtils.removeEnd("www.domain.com", ".com") = "www.domain"
Ответ 11
Что с хлопот, если вы можете просто сделать это
word = (String) word.subSequence(0, word.length() -1);
это возвращает новую строку без последней части строки.