Заменить последнюю часть строки

Я хочу заменить последнюю строку, которая является, с)

Предположим, что строка:

Вставьте в двойное (имя, дата,

быть преобразованным в:

Вставить в двойное (имя, дата)

 Thorbjørn Ravn Andersen02 нояб. 2009 г., 09:53
Рассматривали ли вы переписать свой цикл, чтобы отображалось правильное количество запятых? Я'Мы видели вопрос Stackoverflow, чтобы сделать этот цикл максимально эффективным.
 dragon6622 мая 2012 г., 16:21
Просто используйте: "Вставить в двойное (имя, дата, ".заменить все("(?!. *)», ")");

Ответы на вопрос(10)

str = str.substring(0, str.lastIndexOf(",")) + ")";
 sfussenegger02 нояб. 2009 г., 11:56
Это работает везде, где находится - он будет игнорировать все, что следует за последним ',' хоть.
 ADTC15 авг. 2014 г., 05:44
Исключение будет брошеноsubstring еслиlastIndexOf возвращается.-1
 ty81202 нояб. 2009 г., 11:15
Это изменило бы последнее ",", без разбора, если это последний символ в строке или нет.

й строки. Было бы полезно для вас:

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;
}

чтобы узнать о 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);
 sfussenegger02 нояб. 2009 г., 09:48
Более читабельно, чем что?

если вы можете просто сделать это

word = (String) word.subSequence(0, word.length() -1);

это возвращает новую строку без последней части строки.

https://stackoverflow.com/a/37066403/875282

Я думаю, что это лучший, потому что он использует Java-методы, как задумано, а не пытается заново изобрести колесо. По сути, он читает строку назад и использует объект String 's метод замены, это именно то, что я искал.

Вот документация о методе replaceFirst String и 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до» теги из фрагмента кода, который я хотел интерпретировать. Не забудьте также перевернуть строку поиска, а затем вернуть все обратно к обычным послесловиям.

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();
}

String aResult = "Insert into dual (name,date,".replaceAll(",$", ")");

replaceAll(...) будет сопоставлять строковую строку с заданным регулярным выражением (параметр 1) (в этом случае мы сопоставляем последний символ, если это запятая). Замените его заменой (параметр 2) (в данном случае это '')).

Плюс! Если вы хотите, чтобы позаботились о хвостах и вкладках, вы можете просто изменить регулярное выражение на '',\[ \t\]*$, НОТА ''\[ а также ''\] без обратной косой черты (я нене знаю, как правильно избежать этого).

Надеюсь это поможет.

 csonuryilmaz23 июл. 2013 г., 18:01
Если вы используете replaceAll (", $ ",") ") как replaceAll ("[,] * $ ",") "), он будет работать, хотя и имеет несколько запятых. Для бывших; " (имя Дата,,," -> " (имя Дата)", Я думаю, что это более гибко.
 dragon6607 мая 2012 г., 17:29
+1, это более элегантный способ!

проверьте последний символ (если у вас есть длина, это легко) и замените его - при необходимости. Это решение не lang. конкретный. просто используйте здравый смысл.

 jjnguy02 нояб. 2009 г., 09:39
Это не последний символ, это последнее появление определенного символа.
 Dani02 нояб. 2009 г., 09:42
Ну, вопрос нене ясно об этом. "последняя строка .. " Интересно, что он имел в виду ...
 jjnguy02 нояб. 2009 г., 09:45
Правда что'Поэтому я выбрал метод, который будет работать в обоих случаях.

)

str = str.substring(0, str.length()-1)+")";

Убедитесь, что ваша строка не пуста и не пуста.

(^.+)b(.+$)

Пример (Заменить последний б персонаж)

System.out.println("1abchhhabcjjjabc".replaceFirst("(^.+)b(.+$)", " с2"));
Решение Вопроса

Следующий код должен заменить последнее вхождение',' с.')'

StringBuilder b = new StringBuilder(yourString);
b.replace(yourString.lastIndexOf(","), yourString.lastIndexOf(",") + 1, ")" );
yourString = b.toString();

Заметка Это вызовет исключения, еслиString Безразлично»не содержит.','

 jjnguy10 мар. 2011 г., 04:20
@ Марк, да. Они очень, очень похожи.
 jjnguy02 нояб. 2009 г., 09:39
На обоих языках есть StringBuilder
 jjnguy02 нояб. 2009 г., 09:42
Да, мое решение заменит последнее вхождение строки, даже если это не такТочный последний символ.
 mpen10 мар. 2011 г., 03:47
хех ... тошнит Сначала я подумал, что это C #. единственное отличие - это капитализация методов, на самом деле.
 Esko02 нояб. 2009 г., 11:05
Dani: StringBuilder в Java - это не потокобезопасный вариант StringBuffer, который делает его заметно быстрее (если я правильно помню, около 20-30%) и должен быть предпочтительным, если потокобезопасный StringBuffer не 'т явно необходимо.
 Dani02 нояб. 2009 г., 09:39
Я думаю, что он отметил это как Java, не так ли?т струностроитель дотнет?
 Dani02 нояб. 2009 г., 09:41
10х, нене знаю этого. Я думаю, что ваше решение заменит любое последнее, и не только, если оноs в конце строки.
 hephestos02 февр. 2016 г., 10:36
с помощью регулярных выражений быстрее

Ваш ответ на вопрос