Ответ очень прост.
Если вы хотите, чтобы ваша программа на Java содержала литерал Java String , содержащий последовательность символов '\', '1', '2', '3 ', вы ДОЛЖНЫ написать в своем исходном коде как "...\\123..."
.
Например:
String testInput = "one/two/three\\123today";
int pos = test.indexOf("\\123");
Однако экранирование обратной косой черты только относится к строке Java (или символу) литералам в вашем исходном коде .Если ваша программа читает строку из какого-либо файла (например) или если она собирает строку каким-либо образом, который не включает строковые или символьные литералы, экранирование не требуется в исходном файле или чем-либо еще.Например:
char backslash = (char) 92;
String testInput = "one/two/three" + backslash + "123today";
int pos = test.indexOf(backslash + "123");
или
String input = ... // read a file that contains the sequence '\', '1', '2', '3'
int pos = test.indexOf("\\123"); // search for that sequence
(Кроме того: некоторые языки программирования предоставляют альтернативные строковые литеральные синтаксисы, которые означают, что вы можете обойтись без выхода. Java этого не делает. Конец истории.)
Здесь \ 2 рассматривается как восьмеричное побег по затмению.
Для записи, это спецификация языка Java, которая определяет это.Eclipse просто (правильно) реализует спецификацию языка Java.