Игнорирование восьмиугольных символов в строке - PullRequest
0 голосов
/ 04 ноября 2010

Вот пример строки «one / two / three \ 123today», которую я получаю из неизвестного источника, т.е. я не могу изменить формат входной строки, которую я получаю.Мне нужно получить подстроку после обратной косой черты, то есть 123 сегодня

Здесь \ 123 рассматривается как восьмеричный побег.Я попытался разбить его как последовательность символов, но восьмеричный экранирование рассматривается как символ.

Я пишу код в Java.Как мне это сделать?

Ответы [ 2 ]

2 голосов
/ 04 ноября 2010

Ответ очень прост.

Если вы хотите, чтобы ваша программа на 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.

1 голос
/ 04 ноября 2010

Строка "one/two/three\123today" точно такая же, как "one/two/threeStoday".Если вы хотите разделить символ 'S', вы можете сделать это, но нет никакого способа определить, был ли символ закодирован напрямую или через escape-последовательность.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...