В нашем приложении нам нужно сравнивать и управлять кодом функций следующим образом:
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.
Вы ищете регулярные выражения? Регулярные выражения (Учебники по Java ™)
Итак, в вашей строке мы видим \r\n\t, в памяти - \\r\\n\\t. Я ошибаюсь?
Нет, я имею в виду, что String хранится в БД с \r\n\t, тогда как из внешнего интерфейса каждая из этой группы поступает как \n\t ... кажется, что \r добавляется перед \n\t. ТАК, я хотел бы сделать их равными, прежде чем сравнивать их
В вашем «должно стать» вы не хотите преобразовывать \r\n\t\t\t в \r\n\t, а в \n\t, верно?
Не совсем так, я хочу преобразовать \r\n\t\t\t в \n\t\t\t. Таким образом, каждый раз, когда есть группа (или подгруппа), соответствующая \r\n\t, она должна становиться \n\t. И то, и другое - сама группа или часть более крупной группы.
Проблема только в замене \r\n на \n? Извините за вопрос, но он не очень ясен, потому что не в том, что вы пишете в своем «что-то вроде ... должно стать»
Да, я думаю, что, в конце концов, проблема сводится к замене \ r \ n на \ n ... Извините за путаницу, я никогда не использовал регулярное выражение и, более того, мне трудно понять, почему это происходит .




Если цель состоит в том, чтобы сравнить изменение с другой строкой, возможное решение - удалить \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", "")));
Эм, у меня есть пример ... очень длинный пример, код, который я написал в начале вопроса.