Основываясь на ответе @ zx81, вы получите подходящую идею, я добавил Java 9 results
call, который возвращает Stream
. Поскольку OP хотел использовать split
, я собрал String[]
, как это делает split
.
Осторожно, если у вас есть пробелы после разделителей запятой (a, b, "c,d"
). Затем вам нужно изменить шаблон.
$ jshell
-> String so = "123,test,444,\"don't split, this\",more test,1";
| Added variable so of type String with initial value "123,test,444,"don't split, this",more test,1"
-> Pattern.compile("\"[^\"]*\"|[^,]+").matcher(so).results();
| Expression value is: java.util.stream.ReferencePipeline$Head@2038ae61
| assigned to temporary variable $68 of type java.util.stream.Stream<MatchResult>
-> $68.map(MatchResult::group).toArray(String[]::new);
| Expression value is: [Ljava.lang.String;@6b09bb57
| assigned to temporary variable $69 of type String[]
-> Arrays.stream($69).forEach(System.out::println);
123
test
444
"don't split, this"
more test
1
String so = "123,test,444,\"don't split, this\",more test,1";
Pattern.compile("\"[^\"]*\"|[^,]+")
.matcher(so)
.results()
.map(MatchResult::group)
.toArray(String[]::new);
[^"]
соответствует: цитата, ничего, кроме цитаты, цитата. [^"]*
соответствует: цитата, ничего, кроме цитаты 0 (или более) раз, цитата. [^,]+
- будет «побеждать». results()
требует Java 9 или выше. Stream<MatchResult>
, который я сопоставляю с помощью вызова group()
и собираю в массив строк. Вызов Parameterless toArray()
возвратит Object[]
. Если у вас нет специального BPM-Addin для Visio, вам, вероятно, потребуется перестроить диаграммы с помощью кода. Вам понадобятся позиция, соединения, тип формы (операция) и, наконец, текст.