2010-11-04 3 views
0

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

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

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

ответ

2

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

Если вы хотите, чтобы ваша Java программа содержит Яву строкового литерала, содержащую последовательность символов «\», «1», «2», «3», вы MUST написать как "...\\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 Language Specification.

1

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

+0

Как заменить \ 1 на \\ 1 ?, заменить не работает, не преобразует его в массив символов. –

+0

Вы изменяете строковый литерал в исходном файле. Если я правильно читаю вопрос, проблема в том, что строка содержит символ '' \ 123'', является синтаксисом. –

+0

Да, я пробовал это. Строка '\\' не может быть найдена, так как '\ 1' рассматривается как объект. –