Удалить запятую из строки через запятую - PullRequest
43 голосов
/ 18 октября 2011

Я получил строку из базы данных с несколькими запятыми (,). Я хочу удалить последнюю запятую , но не могу найти простой способ сделать это.

Что у меня есть: kushalhs, mayurvm, narendrabz,

Что я хочу: kushalhs, mayurvm, narendrabz

Ответы [ 16 ]

118 голосов
/ 18 октября 2011

Чтобы удалить часть ", ", за которой сразу следует конец строки, вы можете сделать:

str = str.replaceAll(", $", "");

Это изящно обрабатывает пустой список (пустую строку), в отличие от lastIndexOf / substring решений, которые требуют особой обработки в таком случае.

Пример кода:

String str = "kushalhs, mayurvm, narendrabz, ";
str = str.replaceAll(", $", "");
System.out.println(str);  // prints "kushalhs, mayurvm, narendrabz"

ПРИМЕЧАНИЕ: Поскольку были сделаны некоторые комментарии и предложены изменения в части ", $": выражение должно соответствовать завершающей части, которую вы хотите удалить.

  • Если ваш ввод выглядит как "a,b,c,", используйте ",$".
  • Если ваш ввод выглядит как "a, b, c, ", используйте ", $".
  • Если ваш ввод выглядит как "a , b , c , ", используйте " , $".

Я думаю, вы поняли.

10 голосов
/ 18 октября 2011

Вы можете использовать это:

String abc = "kushalhs , mayurvm , narendrabz ,";
String a = abc.substring(0, abc.lastIndexOf(","));
8 голосов
/ 18 октября 2011

Используйте гуаву, чтобы нормализовать все запятые. Разбейте строку вокруг запятых, выбросьте пустые места и соедините все вместе. Два звонка. Нет петель. Работает с первого раза:

import com.google.common.base.Joiner;
import com.google.common.base.Splitter;

public class TestClass {

    Splitter splitter = Splitter.on(',').omitEmptyStrings().trimResults();
    Joiner joiner = Joiner.on(',').skipNulls();

    public String cleanUpCommas(String string) {
        return joiner.join(splitter.split(string));
    }

}



public class TestMain {

    public static void main(String[] args) {
        TestClass testClass = new TestClass();

        System.out.println(testClass.cleanUpCommas("a,b,c,d,e"));
        System.out.println(testClass.cleanUpCommas("a,b,c,d,e,,,,,"));
        System.out.println(testClass.cleanUpCommas("a,b,,, ,c,d,  ,,e,,,,,"));
        System.out.println(testClass.cleanUpCommas("a,b,c,d,  e,,,,,"));
        System.out.println(testClass.cleanUpCommas(",,, ,,,,a,b,c,d,  e,,,,,"));
    }

}

Выход:

а, б, в, г, д
а, б, в, г, д
а, б, в, г, д
а, б, в, г, д
а, б, в, г, д

Лично я ненавижу возиться с ограничением подсчета подстрок и всей этой ерундой.

3 голосов
/ 30 апреля 2014

Для нескольких запятых

            String names = "Hello,World,,,";
    System.out.println(names.replaceAll("(,)*$", ""));

Вывод: Hello, World

2 голосов
/ 17 июля 2013

Я опаздываю в этой теме, но надеюсь, что это кому-нибудь поможет .......

String abc = "kushalhs , mayurvm , narendrabz ,";

if(abc.indexOf(",") != -1){
    abc = abc.substring(0,abc.length() - 1);
}
1 голос
/ 15 февраля 2018

Вы можете сделать что-то вроде использования функции соединения класса String.

import java.util.Arrays;
import java.util.List;

public class Demo {

    public static void main(String[] args) {
        List<String> items = Arrays.asList("Java", "Ruby", "Python", "C++");
        String output = String.join(",", items);
        System.out.println(output);
    }

}
1 голос
/ 18 мая 2017
(^(\s*?\,+)+\s?)|(^\s+)|(\s+$)|((\s*?\,+)+\s?$)

Regexr

например:

a, b, c
, ,a, b, c, 
,a, b, c   ,
,,a, b, c, ,,,
, a, b, c,    ,
    a, b, c     
     a, b, c ,,
, a, b, c, 
, ,a, b, c, ,
 , a, b, c , 
,,, a, b, c,,, 
,,, ,,,a, b, c,,, ,,,
,,, ,,, a, b, c,,, ,,,
 ,,,a, b, c ,,,
 ,,,a, b, c,,, 
   a, b, c   

становится:

a, b, c
a, b, c
a, b, c
a, b, c
a, b, c
a, b, c
a, b, c
a, b, c
a, b, c
a, b, c
a, b, c
a, b, c
a, b, c
a, b, c
a, b, c
a, b, c
1 голос
/ 18 октября 2011

Этот метод находится в классе BalusC StringUtil. его блог

Я использую его очень часто и обрежу любую строку любого значения:

/**
 * Trim the given string with the given trim value.
 * @param string The string to be trimmed.
 * @param trim The value to trim the given string off.
 * @return The trimmed string.
 */
public static String trim(String string, String trim) {
    if (string == null) {
        return null;
    }

    if (trim.length() == 0) {
        return string;
    }

    int start = 0;
    int end = string.length();
    int length = trim.length();

    while (start + length <= end && string.substring(
            start, start + length).equals(trim)) {
        start += length;
    }
    while (start + length <= end && string.substring(
            end - length, end).equals(trim)) {
        end -= length;
    }

    return string.substring(start, end);
}

например:

trim("1, 2, 3, ", ", ");
0 голосов
/ 15 ноября 2018

И еще ... это также очищает внутренние запятые, смешанные с пробелами:

От , , , ,one,,, , ,two three, , , ,,four, , , , , до one,two three, four

text.replaceAll("^(,|\\s)*|(,|\\s)*$", "").replaceAll("(\\,\\s*)+", ",");
0 голосов
/ 18 мая 2018

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

String ChildBelowList = "";

    if (!Childbelow.isEmpty()) {
        for (int iCB = 0; iCB < Childbelow.size(); iCB++) {

            ChildBelowList = ChildBelowList += Childbelow.get(iCB) + ",";



        }
        ChildBelowList = ChildBelowList.replaceAll("(^(\\s*?\\,+)+\\s?)|(^\\s+)|(\\s+$)|((\\s*?\\,+)+\\s?$)", "");

        tv_childbelow.setText(ChildBelowList);

    } else {
        ll_childbelow.setVisibility(View.GONE);
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...