Java: удаление нескольких вхождений непечатаемых символов из группы

В нашем приложении нам нужно сравнивать и управлять кодом функций следующим образом:

function void disableTestOnDevice(SampleBuilder sample,String devices,String[] devTestCode) {\r\n\t\t   if (devices == null)\r\n\t\t\t   return;\r\n\t       if (sample.getListTransc() != null && sample.getListTransc().size() > 0){\t\r\n\t\t\t\tfor(int i = sample.getListTransc().size()-1; i >= 0; i--){\r\n\t\t\t\t\tViewWorklistBuilder j = (ViewWorklistBuilder)sample.getListTransc().get(i);\r\n\t\t\t\t\tif (j.getDeviceId() == null || j.getDeviceTestCode() == null || j.getDeviceSpecimenCode() == null){\r\n\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (j.getDeviceId().equals(devices)){\r\n\t\t\t\t\t\tif (devTestCode != null){\r\n\t\t\t\t\t\t\tfor(int k = 0;  k < devTestCode.length; k++){\r\n\t\t\t\t\t\t\t\tif (j.getDeviceTestCode().equals(devTestCode[k])){\r\n\t\t\t\t\t\t\t\t\tj.setEnabled(0);\r\n\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\t\t\r\n\t\t\t\t}\r\n\t       }\r\n\t\r\n

Иногда бывает, что добавляются лишние \t, \r или \n, не знаю почему. Итак, прежде чем сравнивать две функции (два объекта String), я хотел бы удалить несколько вхождений непечатаемых символов из каждой группы. Например, группа вроде \r\n\t\r\n должен стать \t\r\n

Или, может быть, что-то вроде

if (devices == null)\r\n\t\t\t   return;\r\n\t\t
for(int i = sample.getListTransc().size()-1; i >= 0; i--){\t\r\n\t\t\t\tSystem.out.println(i);\t\r\n\t\t\t\}

должен стать

if (devices == null)\r\n\t   return;\r\n\t
for(int i = sample.getListTransc().size()-1; i >= 0; i--){\t\r\nSystem.out.println(i);\t\r\n}

Или, может быть, моя проблема могла быть немного более коварной. Я имею в виду, что может потребоваться, чтобы любая группа непечатаемых символов, соответствующая \r\n\t, стала \n\t.

Эм, у меня есть пример ... очень длинный пример, код, который я написал в начале вопроса.

SagittariusA 17.04.2018 09:21

Вы ищете регулярные выражения? Регулярные выражения (Учебники по Java ™)

fheub 17.04.2018 09:39

Итак, в вашей строке мы видим \r\n\t, в памяти - \\r\\n\\t. Я ошибаюсь?

thibsc 17.04.2018 09:40

Нет, я имею в виду, что String хранится в БД с \r\n\t, тогда как из внешнего интерфейса каждая из этой группы поступает как \n\t ... кажется, что \r добавляется перед \n\t. ТАК, я хотел бы сделать их равными, прежде чем сравнивать их

SagittariusA 17.04.2018 09:42

В вашем «должно стать» вы не хотите преобразовывать \r\n\t\t\t в \r\n\t, а в \n\t, верно?

thibsc 17.04.2018 09:47

Не совсем так, я хочу преобразовать \r\n\t\t\t в \n\t\t\t. Таким образом, каждый раз, когда есть группа (или подгруппа), соответствующая \r\n\t, она должна становиться \n\t. И то, и другое - сама группа или часть более крупной группы.

SagittariusA 17.04.2018 09:55

Проблема только в замене \r\n на \n? Извините за вопрос, но он не очень ясен, потому что не в том, что вы пишете в своем «что-то вроде ... должно стать»

thibsc 17.04.2018 09:58

Да, я думаю, что, в конце концов, проблема сводится к замене \ r \ n на \ n ... Извините за путаницу, я никогда не использовал регулярное выражение и, более того, мне трудно понять, почему это происходит .

SagittariusA 17.04.2018 10:01
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
8
46
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Если цель состоит в том, чтобы сравнить изменение с другой строкой, возможное решение - удалить \r, \n и \t в обоих и сравнить их.

String s = "function void disableTestOnDevice(SampleBuilder sample,String devices,String[] devTestCode) {\r\n\t\t if (devices == null)\r\n\t\t\t return;\r\n\t";
String s1 = "function void disableTestOnDevice(SampleBuilder sample,String devices,String[] devTestCode) {\n\t\t if (devices == null)\n\t\t\t return;\n\t";
System.out.println(s.replaceAll("\\r|\\n|\\t", ""));
// false
System.out.println(s.equals(s1));
// true
System.out.println(s.replaceAll("\\r|\\n|\\t", "").equals(s1.replaceAll("\\r|\\n|\\t", "")));

Другие вопросы по теме