Сопоставление строк регулярных выражений с использованием метода .equals

Я пытаюсь сопоставить две строки, используя следующие строки

int row = 1;
String index = row + ",(.*)";
String R = "1,2";
Object result = index.equals(R);

Результат ложный, хотя я хочу, чтобы он был правдой. Я не могу использовать ссылку на другой метод .matches () и даже объект шаблона для индекса, поскольку я хочу, чтобы он интегрировался с другим методом, который использует Hashmap.

В ключах карты (String) будут индексы link (1,2), (1,3), (2,3), ... Я хочу искать их с первого числа, то есть 1, 2 и так далее.

Заранее спасибо.

String#equals не вызывает движок регулярных выражений, он выполняет точное сравнение. Если вам нужна функция регулярного выражения, вам придется использовать String#matches или использовать Pattern.
Tim Biegeleisen 13.09.2018 17:26
The result is false while I want it to be true. - вы не получите это выражение, чтобы вернуть true в Java;)
Alex Shesterov 13.09.2018 17:27

Пожалуйста, добавьте пример того, как вы используете его с HashMap. Вы не можете изменить реализацию String.equals().

Karol Dowbecki 13.09.2018 17:28

Почему вы объявляете результат как Object, если он является логическим?

m0skit0 13.09.2018 17:30
stackoverflow.com/questions/1986031/… может оказаться полезным, даже если он ссылается на синтаксический анализ регулярного выражения HTML (что является плохой идеей) - «совпадает» работает, только если оно полностью соответствует шаблону. Вам нужно частичное совпадение - вам понадобится объект Matcher для такого уровня детализации.
Jeutnarg 13.09.2018 17:50
0
5
1 366
2

Ответы 2

Вы не можете изменить поведение String.equals(). Если вы настаиваете на получении true, используйте:

Object result = !index.equals(R);

Это чистое издевательство :)

Alex Shesterov 13.09.2018 17:29

Или Object result = true

m0skit0 13.09.2018 17:30

@ m0skit0, но не будет ли это преждевременной оптимизацией? :)

Karol Dowbecki 13.09.2018 17:31

Это было бы

boolean result = R.matches(index);

или

boolean result = R.startsWith(row + ",");

Теперь у HashMap нет отсортированных ключей, однако есть карта, которая также является SortedMap, а именно TreeMap:

Вместо того

Map<String, T> map = new HashMap<>();

делать

SortedMap<String, T> map = new TreeMap<>();

В качестве "1," < "12,", учитывая, что ',' < '0', достаточно стандартного сравнения строк.

Тогда возможно получение дополнительная карта строки:

String firstKey = row + ",";
String lastKey = row + "/"; // As '/' > ','

SortedMap submap = map.subMap(firstKey, lastKey);

Эта подкарта является поддержанный исходной картой, то есть ее изменение изменит карту.

Следует сказать, что ключи кажутся немного искусственными, возможно, строка + другое поле в классе RowKey или Map<Integer, Map<String, T>> (сначала карта строки) будет иметь больше смысла.

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