2012-01-12 4 views
1

У меня есть список ситуации, как показано ниже: Строка < -------> Строка BКак сравнить две строки в java?

enter image description here

Я должен сравнить А с В с следующим условием:

1-, если число, показанное в режиме чтения, отличается в обеих сторонах, но остальное то же самое означает, что A = B.

2- в некоторой ситуации, такой как первая в стороне A после num Бер показано красный не существует пустое пространство, но в стороне б есть белое пространство после числа показана красного цвета, а также после того, как X.

3- Существуют также различные случаи, такие как номер 3

Теперь, как может Я лучше всего сравню эту две строки?

private static void controlSimilarity(String memo,String ck,String bc,String id,String product) { 

      if(!id.equals(product)){ 

      listIdentifier.add(new MmoCnBcIdProduct(memo,ck,bc,id,product)); 
      } 
+0

для случая 3, обе строки равны? – Azodious

+0

Сравнение только со вторым пробелом будет работать - по крайней мере, для вашего примера. – home

+0

Вы можете попробовать совместить первую строку с RegEx и попытаться совместить вторую с частями, найденными в первом. –

ответ

0

После предложения Шона Оуэна; вероятно, следующие Regex могут быть использованы:

/(\w.*?)(\d+)X(\w.*)/ 

и захват группы 1 и 3 должны быть равны после падения любого пространства между ними.


  1. Spilt строки по пространству .

  2. [0] и [1] из разделенных результатов.

  3. Соедините все оставшиеся индексы, чтобы создать одну строку. (Используйте trim перед объединением)

  4. найти indexOfX и использовать subString до конца строки.

  5. Используйте equals ИЛИ equalsIgnoreCase, чтобы сравнить комбинированные строки.

  6. Повторите с шага 1 для каждого набора строк.

+0

Это, вероятно, намного проще с регулярными выражениями и группами захвата. –

+0

Не могли бы вы предоставить фрагмент кода? – itro

1

Я бы попытался «нормализовать» строки. Сделайте оба в верхнем регистре, замените «\ s + X \ s +» на «X», замените «\ s +%» на «%», «\ s + MG» на «MG» и т. Д., Затем разделите его пробелами или некоторым регулярным выражением (Класс сканера или сплиттер Guava) и сравнить части строки.

+0

Не могли бы вы предоставить фрагмент кода? – itro

0

Основываясь на данных вашего образца, я советую нормализовать каждую строку, добавив пространство между каждой группой цифр и символами. Так образец 2

TASIGNA CAPS 1X200MG <----> TASIGNA CAPS 112 X 200 MG 

станет:

TASIGNA CAPS 1 X 200 MG <----> TASIGNA CAPS 112 X 200 MG 

Теперь просто разделить на пробельных и сравнить отдельные группы. Все должно быть одинаковым, но одной числовой группой.В зависимости от типа ваших данных (CAPS, COMP, CREME, ...) вы можете игнорировать другую группу. Либо до X, либо после CREME и т. Д. Это сильно зависит от ваших данных.

+0

Не могли бы вы предоставить фрагмент кода? – itro

+0

Нет, извините. Вы должны это сделать. Это всего лишь базовая строка, списки/массивы. Пакет Apache-Commons-Lang можно использовать для облегчения вашей задачи. – MicSim

Смежные вопросы