2016-01-05 2 views
3

Как рассчитать количество вхождений подстроки в строке и, самое главное, если это происходит в третий раз, третья подзаголовок будет заменена на ("")?Замена подстроки нулевым значением для третьего вхождения

это входная выборка (формат ввода может быть различаться): J9581 TAMAN MERLIMAU, JALAN MUAR, MERLIMAU, Melaka, 77300, MERLIMAU

ожидается выход: J9581 TAMAN MERLIMAU, JALAN MUAR, MERLIMAU, Малакка, 77300

+2

Ok. Гоахед и сделай это. –

+2

Можете ли вы поделиться тем, что вы пробовали? – soorapadman

+1

вы можете использовать [String # indexOf (String, int)] (https://docs.oracle.com/javase/7/docs/api/java/lang/String.html#indexOf (java.lang.String ,% 20int)). Если вы обнаружили третье место, вы можете использовать [String # substring (int, int)] (https://docs.oracle.com/javase/7/docs/api/java/lang/String.html#substring (int,% 20int)) и [String # substring (int)] (https://docs.oracle.com/javase/7/docs/api/java/lang/String.html#substring (int)). Существуют и другие способы, такие как использование 'regex' и [Matcher] (https://docs.oracle.com/javase/7/docs/api/java/util/regex/Matcher.html). – SomeJavaGuy

ответ

2

Попробуйте это:

String sentence = "J9581 TAMAN MERLIMAU, JALAN MUAR, MERLIMAU, MELAKA,77300,MERLIMAU"; 
String stringToReplace = "MERLIMAU"; 
int index = 0; 
int occurrences = 0; 
while ((index = sentence.indexOf(stringToReplace, index)) != -1) { 
    ++occurrences; 
    if (occurrences == 3) { 
     sentence = sentence.substring(0, index) + sentence.substring(index + stringToReplace.length()); 
     break; 
    } 
    index += stringToReplace.length(); 
} 

// Add this condition to remove the comma at the end if it exists: 
if (",".equals(sentence.substring(sentence.length() - 1))) { 
    sentence = sentence.substring(0, sentence.length() - 1); 
} 

Вот результат:

J9581 TAMAN MERLIMAU, JALAN MUAR, MERLIMAU, MELAKA,77300 
+1

упрощенный расчет. спасибо :) – ohlala

+0

Добро пожаловать :) – Blunderer

4

Шаг 1: Получить индексы всех вхождений word:

String text = "abcHELLOdefHELLOghiHELLOjkl"; 
String word = "HELLO"; 
List<Integer> indices = new ArrayList<Integer>(); 
for (int i = -1; (i = text.indexOf(word, i + 1)) != -1;) { 
    indices.add(i); 
} 

Шаг 2: Используйте нужный индекс в качестве стартовой точки для замены слова

int desiredIndex = 3; //i.e. I want to remove the third occurrence of word 
int index = indices.get(desiredIndex - 1); //Ideally should check if it found 3 occurrences 
String newWord = text.substring(0,index) + text.substring(index + word.length()); 
System.out.println(newWord); 

Это должно сделать трюк.

+0

Это сделает .. +1 – TheLostMind

+1

Вам нужно проверить размер этого списка перед вызовом 'indices.get()' - если в нем меньше 3 элементов, вы получите 'IndexOutOfBoundsException' – megaflop

+0

@daiscog Согласен с этим комментарием. Этот пример - это просто показать принципал метода. OP может формализовать по своему усмотрению. –

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