Вы не можете связывать имена столбцов в запросе:
$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_";
Вы можете использовать готовое решение из 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]
.
Если вы не хотите зависеть от каких-либо сторонних зависимостей и не хотите выполнять фильтрацию регулярных выражений,
Вы можете сделать это в одну строку с 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] + ")");
Есть несколько регулярных выражений, чтобы справиться с этим, я также предпочел бы метод @rzwitserloot, но если вы хотите увидеть больше.
Проверьте это здесь: Как разделить строку с любыми пробельными символами в качестве разделителей?
glenatron объяснил это:
[ 116] В большинстве диалектов регулярных выражений есть набор удобных кратких описаний символов, которые вы можете использовать для такого рода вещей, - их следует запомнить:
\ w - Соответствует любому символу слова.
\ W - Соответствует любому несловесному символу.
\ s - Соответствует любому символу пробела.
\ S - Совпадает с любым символом, кроме пробелов.
\ d - соответствует любой цифре.
\ D - Совпадает с чем угодно, кроме цифр.
Поиск "Regex Cheatsheets" должен вознаградить вас множеством полезных резюме.
blockquote>Благодаря Гленатрону
Я бы использовал guava
для этого:
String t = " 111 11 ";
Splitter.on(Pattern.compile("\\s+"))
.omitEmptyStrings()
.split(t)
.forEach(System.out::println);
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*");