Подтвердить что ты не робот

Удалить конечную запятую из строки, разделенной запятыми

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

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

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

4b9b3361

Ответ 1

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

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 , ", используйте " , $".

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

Ответ 2

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

String abc = "kushalhs , mayurvm , narendrabz ,";
String a = abc.substring(0, abc.lastIndexOf(","));

Ответ 3

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

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,,,,,"));
    }

}

Вывод:

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

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

Ответ 4

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

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

if(abc.indexOf(",") != -1){
    abc = abc.substring(0,abc.length() - 1);
}

Ответ 5

Для более чем одной запятой

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

Вывод: Hello, World

Ответ 6

Проверьте, str.charAt(str.length() -1) == ','. Тогда сделайте str = str.substring(0, str.length()-1)

Ответ 7

Этот метод находится в классе 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, ", ", ");

Ответ 8

    String str = "kushalhs , mayurvm , narendrabz ,";
    System.out.println(str.replaceAll(",([^,]*)$", "$1"));

Ответ 9

Вы можете попробовать с этим, это сработало для меня:

if (names.endsWith(",")) {
    names = names.substring(0, names.length() - 1);
}

Или вы тоже можете попробовать:

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

Ответ 10

(^(\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

Ответ 11

public static String removeExtraCommas(String entry) {
    if(entry==null)
        return null;

    String ret="";
    entry=entry.replaceAll("\\s","");
    String arr[]=entry.split(",");
    boolean start=true;
    for(String str:arr) {
        if(!"".equalsIgnoreCase(str)) {
            if(start) {
                ret=str;
                start=false;
            }
            else {
            ret=ret+","+str;
            }
        }
    }               
    return ret;

}

Ответ 12

Вы можете сделать что-то подобное с помощью "Java 8"

private static void appendNamesWithComma() {
    List<String> namesList = Arrays.asList("test1", "tester2", "testers3", "t4");
    System.out.println(namesList.stream()
                                .collect(Collectors.joining(", ")));

}