Удалите пустые строки после разбиения StringBuilder на массив Java

Вы не можете связывать имена столбцов в запросе:

$sql = "UPDATE users 
        SET `:dog_col`=:dog_path
        WHERE `username`=:user_id_";

В этом случае вы должны использовать переменную типа:

    $column = 'myColumn';

    $sql = "UPDATE users
            SET $column = :dog_path
            WHERE username = :user_id_";
0
задан Petar Yakov 16 January 2019 в 09:41
поделиться

5 ответов

Вы можете использовать готовое решение из Apache Commons . Вот пример:

StringBuilder sb = new StringBuilder(" 111     11 ");
String trimmedString = StringUtils.normalizeSpace(sb.toString());
String[] trimmedAr = trimmedString.split(" ");
System.out.println(Arrays.toString(trimmedAr));

Вывод: [111, 11].

0
ответ дан MZxFK 16 January 2019 в 09:41
поделиться

Если вы не хотите зависеть от каких-либо сторонних зависимостей и не хотите выполнять фильтрацию регулярных выражений,

Вы можете сделать это в одну строку с API потоков Java 8:

Arrays.stream(sb.toString().trim().split(" ")).filter(s-> !s.equals("")).map(s -> s.trim()).toArray();
[115 ] Для подробной многострочной версии предыдущего:

Arrays.stream(sb.toString()
    .trim() // Trim the starting and ending whitespaces from string
    .split(" ")) // Split the regarding to spaces
    .filter(s-> !s.equals("")) // Filter the non-empty elements from the stream
    .map(s -> s.trim()) // Trim the starting and ending whitespaces from element
    .toArray(); // Collect the elements to object array

Вот рабочий код для демонстрации:

StringBuilder sb = new StringBuilder(" 111     11 ");
Object[] array = Arrays.stream(sb.toString().trim().split(" ")).filter(s-> !s.equals("")).map(s -> s.trim()).toArray();

System.out.println("(" + array[0] + ")");
System.out.println("(" + array[1] + ")");
0
ответ дан Akiner Alkan 16 January 2019 в 09:41
поделиться

Есть несколько регулярных выражений, чтобы справиться с этим, я также предпочел бы метод @rzwitserloot, но если вы хотите увидеть больше.

Проверьте это здесь: Как разделить строку с любыми пробельными символами в качестве разделителей?

glenatron объяснил это:

[ 116] В большинстве диалектов регулярных выражений есть набор удобных кратких описаний символов, которые вы можете использовать для такого рода вещей, - их следует запомнить:

\ w - Соответствует любому символу слова.

\ W - Соответствует любому несловесному символу.

\ s - Соответствует любому символу пробела.

\ S - Совпадает с любым символом, кроме пробелов.

\ d - соответствует любой цифре.

\ D - Совпадает с чем угодно, кроме цифр.

Поиск "Regex Cheatsheets" должен вознаградить вас множеством полезных резюме.

Благодаря Гленатрону

0
ответ дан Wael Azar 16 January 2019 в 09:41
поделиться

Я бы использовал guava для этого:

    String t = " 111     11 ";
    Splitter.on(Pattern.compile("\\s+"))
            .omitEmptyStrings()
            .split(t)
            .forEach(System.out::println);
0
ответ дан Eugene 16 January 2019 в 09:41
поделиться

split принимает регулярное выражение. Итак:

String[] ar = sb.toString().split("\\s+");

Строка \\s является регулярным выражением для «любого пробела», и + равен: 1 или более. Если вы хотите разделить только пробелы (а не переводы строк, табуляции и т. Д.), Попробуйте: String[] ar = sb.toString().split(" +");, что буквально: «разделить на один или несколько пробелов».

Этот трюк работает практически для любого разделителя. Например, разделить запятыми? Попробуйте: .split("\\s*,\\s*"), то есть: 0 или более пробелов, запятая, за которой следует 0 или более пробелов (и регулярные выражения занимают столько, сколько могут).

Обратите внимание, что этот трюк НЕ избавляет от начальных и конечных пробелов. Но чтобы сделать это, используйте отделку. Собираем все вместе:

String[] ar = sb.toString().trim().split("\\s+");

и для запятых:

String[] ar = sb.toString().trim().split("\\s*,\\s*");
0
ответ дан rzwitserloot 16 January 2019 в 09:41
поделиться
Другие вопросы по тегам:

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