Разделить строку точкой с запятой в JAVA - PullRequest
0 голосов
/ 06 августа 2020

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

Строка:

dsnSalarie; e3f5c7c0-5f5e-4579-a262-3fd87aafe1e4; ; S21.G00.30.008; e3f5c7c0-5f5e-4579-a262-3fd87aafe1e4; ; ;

Точка с запятой, закрепленная болтами, является токеном и не должна рассматриваться как разделитель, поэтому я попытался изменить разделитель для строки типа «<;>»:

dsnSalar ie <;> e3f5c7c0-5f5e-4579-a262-3fd87aafe1e4 <;> <;> S21.G00.30.008 <; > e3f5c7c0-5f5e-4579-a262-3fd87aafe1e4 <;>; <;>

С StringUtils.split или StringTokenizer я не могу получить эту точку с запятой, даже при использовании "StringUtils.splitPreserveAllTokens"

Единственный обходной путь, который я нашел, - это окружить точку с запятой пробелом и обрезать ее при разделении:

dsnSalar ie <;> e3f5c7c0-5f5e-4579-a262-3fd87aafe1e4 <;> < ;> S21.G00.30.008 <;> e3f5c7c0-5f5e-4579-a262-3fd87aafe1e4 <;>; <;>

Спасибо за идеи.

1 Ответ

0 голосов
/ 06 августа 2020

Я не совсем уверен, что понимаю, но следующий код:

public class Test {
public static void main(String[] args) {
    String test="dsnSalarie<;>e3f5c7c0-5f5e-4579-a262-3fd87aafe1e4<;> <;>S21.G00.30.008<;>e3f5c7c0-5f5e-4579-a262-3fd87aafe1e4<;>;<;>";
    String[] split = test.split("<;>");
    for (String string : split) {
        System.out.println(string);
    }
}
}

Yields

dsnSalarie
e3f5c7c0-5f5e-4579-a262-3fd87aafe1e4
 
S21.G00.30.008
e3f5c7c0-5f5e-4579-a262-3fd87aafe1e4
;

Токенизатор не может различать одни и те же символы, например точку с запятой. Если есть семанти c, прикрепленное к; вам нужен правильный синтаксический анализатор, такой как ANTLR, чтобы сформулировать свой язык, который может выводить более высокий порядок из токенов.

...