строковая манипуляция - удаление символа из строки - PullRequest
2 голосов
/ 25 июня 2010

В настоящее время у меня есть следующая строка в Java:

"Blah, blah, blah,~Part One, Part Two~,blah blah"

Мне нужно удалить запятую между символом ~, чтобы она читалась.

"Blah, blah, blah,~Part One Part Two~,blah blah"

Может кто-нибудь помочь мне, пожалуйста?

Большое спасибо,

Ответы [ 4 ]

5 голосов
/ 25 июня 2010
    String[] tests = {
        "a,b,c,d,e,f",
        "a,b,~c~,d,e",
        "~a,b,c,d,e~",
        "a,b,c,~d,e,f~,g,h,i,~j,k,l,~m,n,o~,q,r,~s,t,u",
    };
    for (String test : tests) {
        System.out.println(
            test.replaceAll(
                "(^[^~]*~)|([^~]*$)|([^,~]*),|([^,~]*~[^~]*~)",
                "$1$2$3$4"
            )
        );
    }

Вышеуказанные отпечатки:

a,b,c,d,e,f
a,b,~c~,d,e
~abcde~
a,b,c,~def~,g,h,i,~jkl~m,n,o~qr~s,t,u

Как это работает

Есть 4 случая:

  • Мы находимся в начале строки, "снаружи"
    • Просто совпадите, пока мы не найдем первый ~, поэтому в следующий раз мы будем "внутри"
    • Итак, (^[^~]*~)
  • Больше нет ~ до конца строки
    • Если есть четное число ~, мы будем "снаружи"
    • Просто совпадать до конца
    • Итак, ([^~]*$)
  • Если ничего из вышеперечисленного нет, мы "внутри"
    • Продолжайте находить следующую запятую до ~ (поэтому мы все еще "внутри")
      • Итак, ([^,~]*), (не запятую!)
    • Если мы найдем ~ вместо запятой, то выйдем и вернемся к следующему ~
      • Итак, ([^,~]*~[^~]*~)

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

Ссылки

Похожие вопросы

0 голосов
/ 25 июня 2010

Вот метод, который сделает эту работу:

public String deleteCharacterBetween(String deleteFrom, String betweenChar, String charToRemove) {
    int nextIndex = 0, index = 0;
    while (true) {
        index = deleteFrom.indexOf(betweenChar, nextIndex);
        nextIndex= deleteFrom.indexOf(betweenChar, index + 1);
        if (nextIndex < 0 || index < 0)
            return deleteFrom;
        String before = deleteFrom.substring(0, index);
        String toEdit = deleteFrom.substring(index, nextIndex);
        String after = deleteFrom.substring(nextIndex);
        toEdit = toEdit.replace(charToRemove, "");
        deleteFrom = before + toEdit + after;
    }
}

Вы можете назвать его так:

String a = "Blah, blah, blah,~Part One, Part Two~,blah blahBlah, blah, blah,~Part One, Part Two~,blah blah";
System.out.println(deleteCharacterBetween(a, "~", ","));
0 голосов
/ 25 июня 2010
String text = "Blah, blah, blah,~Part One, Part Two~,blah blah,~Part One, Part Two~,blah blah";
Pattern pattern = Pattern.compile("~[^~]+~");
Matcher matcher =pattern.matcher(text);
StringBuffer sb = new StringBuffer();
while(matcher.find()) {
    matcher.appendReplacement(sb, matcher.group(0).replaceAll(",", ""));
}
matcher.appendTail(sb);
text = sb.toString();
0 голосов
/ 25 июня 2010

Я не проверял это, но я бы сделал что-то вроде:

string sample = "Blah, blah, blah,~Part One, Part Two~,blah blah";
Regex r = new Regex("(.+)\\~(.+),(.+)\\~(.+)","${1}~${2}${3}~${4}");
r.replaceAll(sample );

Я ссылался Регулярные выражения в Java . Здесь. + Соответствует одному или нескольким любым символам. Больше таких образцов можно найти здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...