2016-11-05 4 views
2

これは私が入力ファイルから取得しています入力された:regexpを使ってjavaの下の型の入力を解析するには?

INPUT:

入力1:

1 book at 11.49 

1 music CD at 15.93 

1 chocolate bar at 1.18 

入力2:

1 imported box of chocolates at 13.05 

1 imported bottle of perfume at 41.20 

1つのProductクラスが存在しています プロダクト(名前、価格、数量、インポート)

これは私がしようとしているものですが、これは複数の入力と生成物の量を読み取っていません:

private static final String ITEM_DESCRIPTION_REGEX = "(\\d+)\\s((\\w+\\s)+)at\\s(\\d+.\\d+)"; 
    public static Product parser(String order) { 
     Matcher m = parse(order); 
     String name = m.group(2).trim(); 
     Product inputDataDTO = new Product(); 
     inputDataDTO.setGoodsName(name); 
     inputDataDTO.setGoodsPrice(new BigDecimal(Double.valueOf(m.group(4)))); 
     if (name.contains("imported")) 
      inputDataDTO.setAdditionalImportedTaxPercentage(true); 
     if (Util.getExemptedProductLists().contains(name)) 
      inputDataDTO.setExemptTax(true); 
     return inputDataDTO; 
    } 
    public static Matcher parse(String description) { 
     Pattern pattern = Pattern.compile(ITEM_DESCRIPTION_REGEX); 
     Matcher matcher = pattern.matcher(description); 
     matcher.find(); 
     return matcher; 
    } 
+1

あなたが試したことを何でも見せてください。 –

+0

が質問に追加されました、btw私はregexpであまりにも良くないです、私はそれを学んでいます – user1079341

答えて

0

あなたはすべての製品をキャプチャしたい場合は、あなたがwhileループ必要があります。

private static final String ITEM_DESCRIPTION_REGEX = "(\\d+)\\s((\\w+\\s)+)at\\s(\\d+.\\d+)"; 
    public static List<Product> parser(String order) { 
     Pattern pattern = Pattern.compile(ITEM_DESCRIPTION_REGEX); 
     Matcher m = pattern.matcher(order); 
     List<Product> inputDataDTOs = new ArrayList<>(); 
     while(m.find()) { 
      String name = m.group(2).trim(); 
      Product inputDataDTO = new Product(); 
      inputDataDTO.setGoodsName(name); 
      inputDataDTO.setGoodsPrice(new BigDecimal(Double.valueOf(m.group(4)))); 
      if (name.contains("imported")) 
      inputDataDTO.setAdditionalImportedTaxPercentage(true); 
      if (Util.getExemptedProductLists().contains(name)) 
      inputDataDTO.setExemptTax(true); 
      inputDataDTOs.add(inputDataDTO); 
     } 
     return inputDataDTOs; 
    } 
関連する問題