2016-12-12 3 views
-3

Я сохранил единицы в файле .txt. Они попадают в список массивов. Теперь я хочу проверить, присутствует ли какой-либо из элементов в строке.Как разделить предложение на слова и сравнить с другой строкой?

Список содержит:

"units", "kg", "kilogms", "kilo", "literes", "Liter", "packets", "packet", "gms", "grams", "half kg"

Мол, если у меня есть строка - 1 кг риса, я хочу, чтобы получить номера из этой строки, и я хочу разделить это предложение на слова и хочу сравнить друг с элемент из списка массивов единиц. Если он присутствует, я хочу его сохранить. Поэтому я хочу отдельно хранить 1 кг и рис. строка может содержать любые пробелы, которые я хочу обрезать все эти пробелы и проверить сравнение.

Получение текстового файла в списке массивов.

public class ReadTextFiles { 

    public static List<String> readItemNamesFile(Context context) { 
     String sText = null; 
     List<String> stringList; 
     try{ 

      InputStream is = context.getResources().openRawResource(R.raw.item_names); 
      //Use one of the above as per your file existing folder 

      int size = is.available(); 
      byte[] buffer = new byte[size]; 
      is.read(buffer); 
      is.close(); 
      sText = new String(buffer, "UTF-8"); 

      String[] sTextArray = sText.replace("\"", "").split(","); 
      stringList = new ArrayList<String>(Arrays.asList(sTextArray)); 
      System.out.print(stringList); 
     } catch (IOException ex) { 
      ex.printStackTrace(); 
      return null; 
     } 
     return stringList; 

    } 
} 

public void getUnits() 
{ 
    List<String> units = new ArrayList<>(); 

    units = ReadTextFiles.readUnitsFile(getActivity()); 

    System.out.print(units.size()); 

} 

Теперь я хочу, чтобы сравнить строки предположить его «1 кг картофеля» .Затем должен найти картофель из списка массива. Также он должен быть нечувствительным к регистру.

+0

Если у вас есть контроль над вашими данными, я бы рекомендовал переход к более сложной структуры, как JSON или XML , –

+0

извините, не понял. @RomanKolomenskii – Sid

+0

Почему JSON и XML считаются сложной структурой @RomanKolomenskii? –

ответ

1

Это полное решение вашего требования, как я понял:

String measuring = "\"units\", \"kg\", \"kilogms\", \"kilo\", \"literes\", \"Liter\", \"packets\", \"packet\", \"gms\", \"grams\", \"half kg\""; 
    String items = "\"Potato\", \"rice\", \"Eggs\", \"Maggi\", \"Dryfruits\", \"Maza\", \"cold drink\", \"sauce\", \"catchup\", \"coconut oil\""; 
    String matching = "Kg500 Potato";//"Potato 1 kg"; 
    String item = "", measuringUnit = "", quantity = ""; 

    private void findOut() { 
     String[] sMeasuringArray = measuring.replace("\"", "").split(", "); 
     ArrayList<String> measuringList = new ArrayList<String>(Arrays.asList(sMeasuringArray)); 

     String[] sItemsArray = items.replace("\"", "").split(", "); 
     ArrayList<String> itemsList = new ArrayList<String>(Arrays.asList(sItemsArray)); 

     String[] sMatchingArray = matching.split(" "); 

     matching = matching.toUpperCase(); 

     for (int i = 0; i < measuringList.size(); i++) { 
      if (matching.contains(measuringList.get(i).toUpperCase())) { 
       measuringUnit = measuringList.get(i).trim(); 
       break; 
      } 
     } 

     for (int i = 0; i < itemsList.size(); i++) { 
      if (matching.contains(itemsList.get(i).toUpperCase())) { 
       item = itemsList.get(i).trim(); 
       break; 
      } 
     } 

     if (matching!= null) { 
      String[] part = matching.split("(?<=\\D)(?=\\d)|(?<=\\d)(?=\\D)"); 
      for (int k = 0; k < part.length; k++) { 
       try { 
        Integer.parseInt(part[k]); 
        quantity = part[k]; 
        break; 
       } catch (Exception ex) { 
        continue; 
       } 
      } 
     } 

     /*if (sMatchingArray != null) { 
      if (sMatchingArray.length == 3) { 
       for (int j = 0; j < sMatchingArray.length; j++) { 
        if (measuringUnit.trim().equals(sMatchingArray[j].trim())) { 
         quantity = sMatchingArray[j - 1].trim(); 
         break; 
        } 
       } 
      } else if (sMatchingArray.length == 2) { 

       String[] part = matching.split("(?<=\\D)(?=\\d)|(?<=\\d)(?=\\D)"); 
       for (int k = 0; k < part.length; k++) { 
        try { 
         Integer.parseInt(part[k]); 
         quantity = part[k]; 
         break; 
        } catch (Exception ex) { 
         continue; 
        } 
       } 
      } 
     }*/ 

     Log.e("Solution: ", "item = " + item + ", measuringUnit = " + measuringUnit + ", quantity = " + quantity); 
    } 
+0

Можете ли вы сказать мне, как это работает? – Sid

+0

только единица измерения кг. У меня нет количества и предмета. – Sid

+0

Вы не получили товар, потому что в моем примере кода образец соответствует «1 кг картофеля», который находится в маленькой букве, но в списке предметов это похоже на «Картофель». И за количество позвольте мне проверить. –

1

Я собираюсь использовать алгоритмический подход для ответа. Так вот он идет:

strItem = "1kg rice"; 
//Run a loop through the list of units and for each unit check this 
if (strItem.contains(list.get(index))) 
//Do the needful and break 
+0

, но индекс строки может быть любым. Как «рис 1 кг» или «рис 1 кг». – Sid

+0

Вы не упомянули об этом в своем вопросе. Ну, для этого вам не нужно разделить строку. Просто проверив это, единицы сделают это. – AlphaQ

+0

и предположим, что если я хочу проверить его для названия элемента i.e рис? Можете привести мне пример. – Sid

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