Ответ 1
Просто обрезайте его перед разбиением
" A B # C#D# E # ".trim().split("\\s*#\\s*")
Пространства после запятых в [ A B, C, D, E]
являются только способом Arrays.toString
печатает
Есть ли какой-либо библиотечный API или шаблон регулярного выражения для разбиения строки на каком-то разделителе и автоматически обрезать передние и конечные пробелы из каждого элемента без необходимости циклического элемента?
Например, при расщеплении " A B # C#D# E # "
на #
желаемый результат равен [A B,C,D,E]
Ближайший я получил str.split("\\s*#\\s*")
, который дает [ A B, C, D, E]
Просто обрезайте его перед разбиением
" A B # C#D# E # ".trim().split("\\s*#\\s*")
Пространства после запятых в [ A B, C, D, E]
являются только способом Arrays.toString
печатает
Гуава на помощь! Используйте CharMatcher и Splitter. Я использую Joiner просто для того, чтобы сшить Итерабель обратно вместе, ясно показывая, что в iterable есть только буквы в нем, без заполнения, посторонних пробелов или знаков хеширования.
package main;
import com.google.common.base.CharMatcher;
import com.google.common.base.Joiner;
import com.google.common.base.Splitter;
public class TestMain {
static Splitter split = Splitter.on(CharMatcher.anyOf(" #")).trimResults()
.omitEmptyStrings();
static Joiner join = Joiner.on(", ");
public static void main(String[] args) {
final String test = " A B # C#D# E # ";
System.out.println(join.join(split.split(test)));
}
}
Вывод:
A, B, C, D, E
Отлично подходит для людей, у которых возникают головные боли при регулярном выражении.
Как насчет того, чтобы делать замену перед расщеплением?
str.replaceall("\\s*#\\s*","#").split()
Отредактировано для исправления ошибки пробела, о которой указал Маркус.
Я думаю, что правильное регулярное выражение должно быть [\ s] * # [\ s] *:
str.split("[\\s]*#[\\s]*");
Протестировано: http://regexpal.com/
Без регулярного выражения он должен выглядеть так:
" A B # C#D# E # "
.split('#')
.map(function(item) { return item.trim(); } )
.filter(function(n){ return n != "" });
выходы: [ "A B", "C", "D", "E" ]