2015-02-05 8 views
1

Im пытается заменить часть строки на основе определенной фразы, присутствующей в ней. Рассмотрим строку «Привет, мой Dg6Us9k. Я жив»..Как заменить часть строки на Java?

Я хочу найти фазу «мой» и удалить 8 символов вправо, что приведет к удалению хеш-кода. Это дает строку «Привет, я жив». Как я могу сделать это на Java?

ответ

1

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

public static void main(String[] args) { 
    String s = "Hello my Dg6Us9k. I am alive"; 
    String newString=s.replaceFirst("\\smy\\s\\w{7}", ""); 
    System.out.println(newString); 
} 

O/P: Hello. I am alive

+0

w перед скобками означает, что он будет искать слово? 7 - максимальная длина или требуемая длина? – Kahler

+1

@Kahler - точный 7. w может соответствовать 'a-zA-Z_' – TheLostMind

+0

Это работает очень хорошо, спасибо за предложение! Однако перед тем, как отобразить измененную строку, ее нужно передать в строку. – MisterIbbs

2

Это следует сделать это:

String s = ("Hello my Dg6Us9k. I am alive"); 
s.replace(s.substring(s.indexOf("my"), s.indexOf("my")+11),""); 

Это заменяет строку начинается в «мой» и 11 голец долго ни с чем.

+0

Это также работает, спасибо за предложение :) – MisterIbbs

5

Вы можете достичь этого через функцию string.replaceAll.

string.replaceAll("\\bmy.{8}", ""); 

Добавить \\b при необходимости. \\b называется границей слова, которая совпадает между символом слова и символом, отличным от слова. .{8} соответствует следующим 8 символам.

Для удаления также пробел перед my

System.out.println("Hello my Dg6Us9k. I am alive.".replaceAll("\\smy.{8}", "")); 
+0

Что вы имеете в виду «добавить \\ b при необходимости "? Что оно делает? – Kahler

+0

@ TheLostMind отредактирован в соответствии с его expexted выходом, но он говорит, что я хочу найти фазу «мой» и удалить 8 символов вправо' –

+0

@AvinashRaj - ya .. но как только я запустил программу, его ожидаемый результат отличается от его * question * :) – TheLostMind

1

Java строки являются неизменными, так что вы не можете изменить строка. Вы должны создать новую строку. Итак, найдите индекс i «my». Затем конкатенировать подстроку до (0 ... i) и после (i + 8 ...).

int i = s.indexOf("my"); 
if (i == -1) { /* no "my" in there! */ } 
string ret = s.substring(0,i); 
ret.concat(s.substring(i+2+8)); 
return ret; 
+0

Хороший вопрос об неизменяемости. – Kahler

0

Если вы хотите быть гибким о длине хэш-кода, использовать на следующие регулярному_выражению:

String foo="Hello my Dg6Us9k. I am alive."; 
String bar = foo.replaceFirst("\\smy.*?\\.", "."); 
System.out.println(bar);