2009-11-02 7 views
32

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

Пусть строка:

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

который должен быть преобразован в:

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

+3

Рассматривали ли вы переписывание своей петли, чтобы появилось правильное количество запятых? Я видел вопрос Stackoverflow для того, чтобы получить именно этот цикл как можно эффективнее. –

+0

Просто используйте: «Вставить в двойное (имя, дата,». ReplaceAll («, (?!. *,)», «)»); – dragon66

ответ

61

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

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

Примечание Это будет бросать исключения, если String не содержит ','.

+0

Я думаю, что он отметил его как java, а не строкостроитель dotnet? – Dani

+9

Оба языка имеют StringBuilder – jjnguy

+0

10x, не знал этого. Я думаю, что ваше решение заменит последнее, и не только, если оно находится в конце строки. – Dani

1

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

+0

Его не последний символ, его последнее вхождение определенного символа. – jjnguy

+0

Ну, вопрос не совсем ясно. «последняя строка ..» Интересно, что он имел в виду ... – Dani

+0

Верно, поэтому я пошел на метод, который будет работать в обоих случаях. – jjnguy

7
str = str.substring(0, str.lastIndexOf(",")) + ")"; 
+0

Это изменило бы последнее «,», неизбирательное, если оно является последним символом в строке или нет. – ty812

+0

Он работает везде, где находится «,» - он будет игнорировать все, что следует за последним ». – sfussenegger

+0

Исключение будет вызываться 'substring', если' lastIndexOf' возвращает '-1'. – ADTC

30

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

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

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

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

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

+1

+1, Это более элегантный способ! – dragon66

+2

Если вы используете replaceAll (", $", ")") как replaceAll ("[,] * $", ")"), он будет работать, хотя он имеет несколько запятых. Для ex; "(имя, дата ,,," -> "(имя, дата)". Я думаю, что это более гибко. – csonuryilmaz

2

Чем более читаемый способ ... Что вы можете использовать, чтобы узнать о струнных и его функциях

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); 
+7

Более читабельна, чем что? – sfussenegger

17

Это пользовательский метод, чтобы заменить только последнюю подстроку заданной строки. Было бы полезно для вас:

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

классный, это сработало для меня. Мне просто нужно было адаптироваться к моим бизнес-требованиям –

0

Попробуйте это регулярное выражение (^.+)b(.+$)

Пример (Replace последний б характер)

System.out.println("1abchhhabcjjjabc".replaceFirst("(^.+)b(.+$)", "$1$2")); 
-1

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

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

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

0

заменить последний символ вашей строки по )

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

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

Смежные вопросы