Подстрока Java в разделителе без разделения или регулярного выражения

У меня есть отдельный тестовый класс, который будет передавать строку с высоким значением и низким значением с : между ними, представляющими числа 0-6. Например, «6:2». Мне нужно разделить эти числа на основе разделителя :, но мой профессор не хочет, чтобы я использовал разделение или какое-либо регулярное выражение.

public class DominoHighLowImpl_Laursen implements Domino {

public static final String HIGH_LOW_STRING_SEPARATOR = ":";

public DominoHighLowImpl(String highLowString) 
{



}

Итак, набрав

String substr = highLowString.substring(highLowString.indexOf(HIGH_LOW_STRING_SEPARATOR) + 1);  

вернул число после разделителя, как я и ожидал

НО

String substr = highLowString.substring(highLowString.indexOf(HIGH_LOW_STRING_SEPARATOR) - 1);

не возвращает число перед разделителем. Что я делаю не так в последней части?

Взгляните на substring(int) и substring(int, int)

Lino 05.03.2019 16:05
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
1
78
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Проверьте подстрока (int beginIndex) и подстрока (int beginIndex, int endIndex):

String high = highLowString.substring(0, highLowString.indexOf(HIGH_LOW_STRING_SEPARATOR));
String low = highLowString.substring(highLowString.indexOf(HIGH_LOW_STRING_SEPARATOR) + 1);

String substr = highLowString.substring(highLowString.indexOf(HIGH_LOW_STRING_SEPARATOR) + 1); работает, потому что indexOf(HIGH_LOW_STRING_SEPARATOR) равно 1. Таким образом, substring(2) будет содержать «2».

Но когда вы делаете

String substr = highLowString.substring(highLowString.indexOf(HIGH_LOW_STRING_SEPARATOR) - 1) значение становится indexOf(0), поэтому вся строка «6: 2» сохраняется.

Пытаться

String substr = highLowString.substring(0,highLowString.indexOf(HIGH_LOW_STRING_SEPARATOR)); чтобы получить "6".

Метод substring перегружен, что означает, что он может быть вызван с передачей разного количества int параметров/аргументов. Если вы вызовете его только с одним, вы получите подстроку, которая начинается с переданного индекса и заканчивается максимальным индексом String. Если вы вызовете его с двумя параметрами, вы получите подстроку, которая начинается с нижнего переданного индекса и заканчивается до вторым переданным индексом.

См. этот пример:

public class DominoHighLowImpl_Laursen {

    public static final String HIGH_LOW_STRING_SEPARATOR = ":";

    private String highLowString;

    public DominoHighLowImpl_Laursen(String highLowString) {
        this.highLowString = highLowString;
    }

    public String getLow() {
        return highLowString.substring(0, highLowString.indexOf(HIGH_LOW_STRING_SEPARATOR));
    }

    public String getHigh() {
        return highLowString.substring(highLowString.indexOf(HIGH_LOW_STRING_SEPARATOR) + 1);
    }

    public static void main(String[] args) {
        DominoHighLowImpl_Laursen domino = new DominoHighLowImpl_Laursen("1020304:4456778");

        System.out.println("High:\t" + domino.getHigh());
        System.out.println("Low:\t" + domino.getLow());
    }
}

Было бы более эффективно, если бы вы выполняли эти вызовы подстроки непосредственно внутри конструктора, но это всего лишь деталь.

Lino 05.03.2019 16:14

@ Лино совершенно прав, но здесь это не наглядный пример. Нужно иметь два атрибута String и определить их через конструктор. Я думаю, что OP не желает оптимальной эффективности в этом случае.

deHaar 05.03.2019 16:16

Другие вопросы по теме