HishamMohammedA Ответов: 1

Есть ли методы для сравнения строк, которые имеют разную длину в java?


Всем привет,

У меня есть два сценария
Первый сценарий:
Если я получу такие строки, как эта:
x = x + 10;
x = x + a [i];
x = x + a [i] +10;
Примечание: буквы здесь могут быть разными, и примеры тоже могут быть разными.
Я отделил сторону перед знаком = от стороны после знака =
Итак, у меня есть ArrayList, где элементы выглядят следующим образом
Индекс 0 -> x
Индекс 1 -> x + 10
Индекс 2 -> x
Индекс 3 -> a [i]
Индекс 4 -> x
Индекс 5 -> x + a [i] +10
Теперь я хочу провести сравнение между предложениями, поэтому я сделаю сравнение между индексом 0 и индексом 1
и между индексом 2, индексом 3 и так далее.

Назовем стороне до равна (левая сторона) в str1 выглядит следующим образом
а после равенства (правая сторона) к str2

Есть ли возможность сделать сравнение между двумя сторонами и сказать если str1 переменная а str2 два это имя одной и той же переменной а массив идет после имени переменной как в следующем примере:
x = x + a[i] * 10;
мы возвращаем ложь
но если имена переменных отличаются друг от друга мы возвращаем true как в следующем примере:
x = y + a[i] + 10;
так что ложным будет возврат на что-то подобное этому:
x = x + a[i];
или
x = x + a[i] + 10;
Примечание: буквы могут быть разными. я имею в виду у нас может быть что то вроде этого:
sum = sum + a[i]; и так далее.

Второй сценарий:
Примечание: буквы и цифры могут быть изменены.

если у меня есть строка, подобная следующей:
a [i] = b [i] + c [i];
или
a [i] = b [i + 1] * c [i] +10;

Я смог отделить сторону до = и сторону после = таким же образом, как я упоминал ранее, и это выглядит следующим образом:
Индекс 0 -> a [i]
Индекс 1 -> b [i] + c [i]
Индекс 2 -> a [i]
Индекс 3 -> b [i + 1] * c [i] +10
вопрос вот в чем:
Могу ли я также отделить левую сторону друг от друга? Я имею в виду, я хочу, чтобы первое предложение было таким
а [я] сам по себе
b [i] сам по себе
c [i] сам по себе
то же самое и со вторым примером, потому что я хочу сравнить вот так:
Поэтому я хочу сравнить
a [i] с b [i]
и сравнить
a [i] с c [i]

Что я уже пробовал:

Я разделяю две стороны, как я уже упоминал выше, и я использовал charAT, но я не знаю, как узнать об остальной части утверждения, как в этом примере:
x = x + a[i];
он вернет 1, потому что x = x, но я не знаю, как проверить остальную часть строки, и как я отделяю строку больше, как в этом примере:
a[i] = b[i] + c[i+1];

1 Ответов

Рейтинг:
1

Richard MacCutchan

Похоже, что существует не простое правило, которому вы следуете, поэтому вы почти на грани того, чтобы нуждаться в другом правиле для каждой строки. Использование текстового анализатора, возможно, упростит вам задачу, поскольку вы получите набор токенов и отношений. Взгляните на некоторые из статей по синтаксическому анализу https://www.codeproject.com/Articles/code-witch#Article[^ посмотреть, не смогут ли они помочь.


HishamMohammedA

Я уже получаю строку с помощью метода antlr getText (), но столкнулся с проблемой, когда попытался взять каждый узел, потому что не знаю, как углубиться в дерево.

Richard MacCutchan

Извините, но это уже другой вопрос, вы не упомянули antlr.

HishamMohammedA

это все тот же вопрос, ничего не меняется, но все, что я говорил, это то, что я уже беру строки с помощью antlr, и я не знаю, как полностью использовать его, поэтому я сейчас пытаюсь со строками.

Richard MacCutchan

Хорошо, но сначала вам нужно определить свои правила.

HishamMohammedA

Не могли бы вы уточнить, пожалуйста, потому что я не понял

Richard MacCutchan

Извините, но я не понимаю, что вы пытаетесь сделать. Вы разделяете операторы на отдельные токены, но не ясно, что вы пытаетесь сравнить.

Вы заявляете:

Поэтому я хочу сравнить
a [i] с b [i]
и сравнить
a [i] с c [i]

Но что это значит? В любых простых терминах оба ответа ложны.

HishamMohammedA

Мне очень жаль, Ричард, простите мой английский, может быть, мое объяснение было недостаточно хорошим.
допустим, у меня есть такое заявление:
a[i] = b[i] + c[i];
теперь я разделил их на две части.
левая боковая часть -> a[i]
а правая боковая часть -> b[i] + c[i]
Я знаю, что когда я сравниваю их, это будет ложно, но я не знаю, как разделить вторую часть строки (правую сторону) на две строки, такие как:
b[i]
c[i]
Я пытаюсь сделать анализ зависимостей и в анализе зависимостей
если у нас есть такое утверждение:a[i] = b[i] + c[i], то зависимости нет, поэтому тест возвращает true здесь, но в этом примере:
a[i] = b[i] + a[i+1]; Анализ зависимостей должен возвращать false, почему, потому что когда мы сравниваем
а[я] с B[я] не depencency но когда мы сравниваем с[я] с[я+1] есть петли несли depencency

Richard MacCutchan

Извините, но это то, над чем я еще не работал. Я предлагаю вам открыть новый вопрос с лучшим названием и более подробной информацией о том, что именно вы пытаетесь сделать. Название этого вопроса спрашивает, Есть ли способ сравнить строки, что на самом деле не то, о чем идет речь.