#java
#java
Вопрос:
Я увидел в Интернете некоторый код, относящийся к древовидным картам, мне стало любопытно, и я хочу узнать, как используется аргумент ‘%’ в методе indexOf ().
Вот строка кода:
Scanner scanner = new Scanner( dataFile );
while (scanner.hasNextLine()) {
String phoneEntry = scanner.nextLine();
int separatorPosition = phoneEntry.indexOf('%');
if (separatorPosition == -1)
throw new IOException("File is not a phonebook data file.");
name = phoneEntry.substring(0, separatorPosition);
number = phoneEntry.substring(separatorPosition 1);
phoneBook.put(name,number);
Комментарии:
1. О чем ты говоришь? Какой именно
indexOf()
метод?2.
String.indexOf
?List.indexOf
? Что-то еще?3. Можете ли вы также показать код?
4. Да, я насчитал около 19 различных
indexOf
методов в JDK 8. Можете ли вы помочь нам, сузив список до определенного класса?5. Хорошо, вы рассматриваете использование
indexOf
вString
., с аргументом'%'
. В чем вы не уверены?
Ответ №1:
Процитируем String#indexOf(int ch)
java doc:
Возвращает индекс в этой строке первого вхождения указанного символа. Если символ со значением
ch
встречается в последовательности символов, представленной этимString
объектом, то возвращается индекс (в кодовых единицах Юникода) первого такого появления. Для значенийch
в диапазоне от 0 до 0xFFFF (включительно) это наименьшее значение k, такое, что:
this.charAt(k) == ch
верно. Для других значений
ch
это наименьшее значение k, такое, что:
this.codePointAt(k) == ch
верно. В любом случае, если в этой строке нет такого символа, то возвращается значение -1.
Итак, вот оно. phoneEntry.indexOf('%')
вернет индекс первого символа %
в строковом значении phoneEntry
. Итак, если phoneEntry
бы, например, сохранялось строковое значение "50% of 50% is 25%."
, результатом было бы 2
, которое является индексом на основе 0 первого %
в этой строке:
50% of 50% is 25%.
^
Если строка phoneEntry
не содержит %
, вместо этого это приведет к -1
.
В данном случае '%'
это просто символ, который задается в качестве аргумента для .indexOf
метода. Если бы вы использовали phoneEntry.indexOf('s')
вместо этого, это дало бы результат 12 с тем же строковым значением:
50% of 50% is 25%.
^