Замена строки в Java - PullRequest
       17

Замена строки в Java

5 голосов
/ 23 декабря 2009

В настоящее время у меня есть строка, которая содержит символы A, B и C, например, строка выглядит как

"A some other random stuff B C"

другие случайные вещи не содержат A, B или CI, и я хочу заменить A, B & C на 'A', 'B' и 'C' соответственно, что является лучшим способом сделать это в настоящее время, которое я делаю :

String.replace("A", "'A'").replace("B", "'B'").replace("C", "'C'")

Ответы [ 5 ]

16 голосов
/ 23 декабря 2009

ответ cletus работает нормально, если A, B и C - это именно те одиночные символы, но не в том случае, если они могут быть более длинными строками, и вы просто назвали их A, B и C в качестве примера. Если это более длинные строки, вам нужно сделать:

String input = "FOO some other random stuff BAR BAZ";
String output = input.replaceAll("FOO|BAR|BAZ", "'$0'");

Вам также потребуется экранировать любые специальные символы в FOO, BAR и BAZ, чтобы они не интерпретировались как символы специального регулярного выражения.

10 голосов
/ 23 декабря 2009

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

String input = "A some other random stuff B C";
String output = input.replaceAll("[ABC]", "'$0'");

Выход:

'A' some other random stuff 'B' 'C'
3 голосов
/ 23 декабря 2009

Взгляните на StringUtils от Apache Commons Lang и его различных replace методов.

2 голосов
/ 23 декабря 2009

Я думаю, что регулярное выражение не очень подходит, если это довольно сложные строки.

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

public static String replace(String string, String[] toFind, String[] toReplace) {
    if (toFind.length != toReplace.length) {
        throw new IllegalArgumentException("Arrays must be of the same length.");
    }
    for (int i = 0; i < toFind.length; i++) {
        string = string.replace(toFind[i], toReplace[i]);
    }
    return string;
}

Возможно, он уже есть в Apache Commons или в Google Code. Посмотрите, предпочитаете ли вы сторонние API выше доморощенного материала.

Редактировать : почему технически правильное отрицание, но, по вашему мнению, не является предпочтительным ответом? Только не голосуй.

1 голос
/ 23 декабря 2009

Ответы других людей лучше, но, исходя из предположения, которое вы пытаетесь выучить, я хотел указать на проблемы с вашим исходным кодом.

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

public String quoteLetters(String s)
{
    return s.replace("A", "'A'").replace("B", "'B'").replace("C", "'C'");
}

Вот проблемы, которые у вас были:

  • Replace - это метод, а не статическая функция, поэтому вы должны вызывать его для экземпляра String, а не для самой String.
  • Replace возвращает экземпляр новой строки, он не может изменить исходную строку. В моем коде я "возвращаю" новую строку, s остается неизменным.
  • Если это домашняя работа, вы должны пометить ее как таковую.
  • Не цепляйте их, как я, - другие ответы лучше, потому что мои на самом деле создадут 3 новые строки, а затем немедленно уничтожат их.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...