Для чего используется ‘%’ в методе indexOf()?

#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%.
            ^