忽略字符串中的octalescape字符

时间:2010-11-04 06:09:55

标签: java string

这是一个示例字符串“one / two / three \ 123today”,我从一个未知来源获得,但我无法更改我得到的输入字符串的格式。 我需要在反斜杠之后得到子字符串,即123today

这里\ 123被视为八进制逃脱。 我尝试将其拆分为字符序列,但这会将八进制转义视为一个字符。

我在java中编写代码。 我该怎么做呢?

2 个答案:

答案 0 :(得分:2)

答案很简单。

如果您希望Java程序包含包含字符序列'\','1','2','3'的Java字符串文字,那么必须在源代码中将其写为"...\\123..."

例如:

String testInput = "one/two/three\\123today";
int pos = test.indexOf("\\123");

但是,反斜杠转义源代码中的Java字符串(或字符)文字相关。如果您的程序从某个文件中读取String(例如),或者它以某种方式组装String而不涉及String或字符文字,则源文件中不需要转义,或者其他任何操作。例如:

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

(旁白:一些编程语言提供了替代的String文字语法,这意味着你可以免除转义.Java不会。故事结束。)

  

这里的\ 2被eclipse视为八进制逃逸。

对于记录,它是定义它的Java语言规范。 Eclipse只是(正确地)实现了Java语言规范。

答案 1 :(得分:1)

字符串"one/two/three\123today""one/two/threeStoday"完全相同。如果要拆分'S'字符,可以这样做,但无法判断字符是直接编码还是通过转义序列编码。