Сопоставление регулярных выражений с использованием метода .equals - PullRequest
0 голосов
/ 13 сентября 2018

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

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

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

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

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

Ответы [ 2 ]

0 голосов
/ 13 сентября 2018

Было бы

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>> (сначала карта строк) будет иметь больше смысла.

0 голосов
/ 13 сентября 2018

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

Object result = !index.equals(R);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...