2014-11-20 3 views
0

Я не могу понять, что случилось со следующим кодом:Длина строки - неправильный результат?

System.out.println("TEST:"+"/index/index/(\\d+)/".length()); 

Выход: TEST: 19. Но, как я вижу, должно быть 20. Где моя ошибка?

+0

Не рассчитывайте избежать символы См https://docs.oracle.com /javase/tutorial/java/data/characters.html –

ответ

5

В java, \ является символом эвакуации.

So: \\ на самом деле один \.

И потому, что часть строки читается как это: (\d+), что в соответствии с регулярным выражением определение означает «1 или более цифр» :)

+0

Чем я не понимаю, почему я не могу использовать в regex \ d + вместо \\ d +. Не могли бы вы объяснить? –

+0

Потому что с '\ d' escape-символ« escapes »с d, который на самом деле не определен, но если он был' \ t' или '\ n', то он убежал бы, чтобы что-то означать. В вашем случае вам требуется «фактическое» слэш в вашем регулярном выражении, поэтому \\ дает вам это. См. Https://docs.oracle.com/javase/tutorial/java/data/characters.html – vikingsteve

+1

@PashaTurok '' \ '' является специальным символом в String. Его можно использовать для создания разделителей строк, таких как '\ n'' \ r' или tabulator '\ t' или escape' '' (если мы пишем '\" 'внутри строки, этот знак двойной кавычки не будет представлять конец строки, но просто буквальный) или '\ uXXXX', где' XXXX' часть - шестнадцатеричная для индекса Юникода символа, который вы хотите распечатать. Так как '' '' 'special, мы не можем просто написать' \ d', потому что компилятор попытается интерпретировать его как нечто особенное. Поэтому для создания '' '' '' literal нам нужно избежать его с помощью другого '' \ '', что означает, что строка, представляющая один '' \ '', должна быть записана как '' \\ "'. – Pshemo

Смежные вопросы