2014-10-20 2 views
2

Скажите, что у меня есть строка, и я хочу изменить вторую «a» в этой строке на «e».Измените определенное вхождение буквы в строке

String elephant = "elaphant"; 

Я попытался с помощью string.replace(), но это заменяет все коэффициенты а в строке, возвращая «elephent».

elephant.replace("a", "e"); 

Есть ли какой-либо цикл или метод, который я могу использовать для этого? Спасибо вам всем.

+0

Это может быть сделано с регулярным выражением. но я не знаю, как, я не так хорош в регулярном выражении. – afzalex

+0

@awkwardgiraffe это всегда вторая а? –

ответ

1

Вам необходимо получить индекс первого появления письма.

Попробуйте использовать метод indexOf.

int myIndex = elephant.indexOf('a'); 

Как только у вас есть индекс, используйте StringBuilder для замены значения. Кое-что вроде:

StringBuilder sb = new StringBuilder(elephant); 
sb[index] = myIndex; 
elephant = sb.ToString(); 
+0

Этот комментарий ответил на мой вопрос, но что, если я хочу получить индекс второго или третьего вхождения? Или последовательность букв? – wasimsandhu

+0

@awkwardgiraffe Вы можете попробовать использовать первое вхождение «a» в качестве начального индекса, чтобы он не включался, когда вы заинтересованы в получении второго значения. У вас уже есть первый индекс, хранящийся в переменной myIndex, поэтому вы делаете что-то вроде: int mySecondIndex = elephant.indexOf («a», myFirstIndex + 1); Конечно, если вы хотите получить третий, вы можете следовать одному и тому же подходу и использовать второй как отправную точку и так далее. – RizJa

+0

Это помогает много @ RizJa. Спасибо! – wasimsandhu

2

Вы можете преобразовать его в массив символов, выключить нужную букву, а затем преобразовать ее в строку?

String elephant = "elaphant"; 


int index = -1; 
int count = 0; 

while(count < 2) { 
    index = elephant.indexOf("a", index+1); 
    count++; 
} 
if(index >= 0 && index < elephant.length()) { 
    char[] tmp = elephant.toCharArray(); 
    tmp[index] = "e"; 
    elephant = new String(tmp); 
} 

Или, если вы предпочитаете StringBuilder

StringBuilder sbTemp = new StringBuilder(elephant); 
sbTmp = sbTmp.replace(index, index+1, "e"); 
elephant = sbTmp.toString(); 
+0

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

0

Код:

String elephant = "elaphant"; 
    //convert the string to array of string 
    String[] sp = elephant.split(""); 
    int countA = 0; 
    boolean seenTwice = false; 
    String result = ""; 
    for (int i = 0; i < sp.length; i++) { 
     //count number of times that a has been seen 
     if (sp[i].equals("a")) { 
      countA++; 
     } 

     // if a has been seen twice and flag seenTwice has not been see 
     if (countA == 2 && !seenTwice) { 
      result += "e"; 
      seenTwice = true; 
     } else { 
      result += sp[i]; 
     } 
    } 

    System.out.println(result); 

Выход:

elaphent 
+0

. Результат, который я ищу, - «слон», а не «elaphent». – wasimsandhu

+0

@awkwardgiraffe, вы сказали: «Я хочу изменить вторую« а »в этой строке на« е »: поэтому я сделал то, что ты хочешь. Если вы хотите изменить первый а, это eaiser, и я могу обновить свой ответ –

+0

Я хотел сказать, что изменил второе «е» на «а». Однако не стоит беспокоиться, я уже получил свой ответ. – wasimsandhu

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