private List<String> TrocearExpresion(String expresion) { expresion = eliminarParentesisRedundantesExternos(expresion); Map<TipoOperacionCriterioEmun, List<Integer>> posicionOperacionessExternas = obtenerPosicionOperancionesExternas(expresion); Map<TipoOperacionCriterioEmun, Integer> mapaOperacion = obtenerOperacionExterna(posicionOperacionessExternas); if (mapaOperacion.isEmpty() || mapaOperacion.size() != 1) return null; List<String> result = new ArrayList<String>(); for (TipoOperacionCriterioEmun tipoOperacionEmun : mapaOperacion.keySet()) { result.add(0, tipoOperacionEmun.getRepresentacion()); if (tipoOperacionEmun.equals(TipoOperacionCriterioEmun.NOT)) { result.add( 1, expresion.substring( mapaOperacion.get(tipoOperacionEmun) + tipoOperacionEmun.getRepresentacion().length() + 1, expresion.length() - 1)); return result; } result.add(1, expresion.substring(0, mapaOperacion.get(tipoOperacionEmun))); result.add( 2, expresion.substring( mapaOperacion.get(tipoOperacionEmun) + tipoOperacionEmun.getRepresentacion().length(), expresion.length())); } return result; }
private Map<TipoOperacionCriterioEmun, List<Integer>> obtenerPosicionOperancionesExternas( String expresion) { Map<TipoOperacionCriterioEmun, List<Integer>> result = new HashMap<TipoOperacionCriterioEmun, List<Integer>>(); Map<Integer, Integer> mapaParentesis = obtenerPosicionesParentesisExternos(expresion); Integer lastPosicionView = 0; for (TipoOperacionCriterioEmun tipoOperacionEmun : TipoOperacionCriterioEmun.getListaValoresEvaluacion()) { lastPosicionView = 0; List<Integer> listaPosicines = new ArrayList<Integer>(); if (tipoOperacionEmun.equals(TipoOperacionCriterioEmun.NOT)) { if ((lastPosicionView = expresion.indexOf(tipoOperacionEmun.getRepresentacion() + "(", lastPosicionView)) != -1) { if (!estaEntreParentesis(mapaParentesis, lastPosicionView) && mapaParentesis.get( lastPosicionView + TipoOperacionCriterioEmun.NOT.getRepresentacion().length()) == expresion.length() - 1) { listaPosicines.add(lastPosicionView); result.put(tipoOperacionEmun, listaPosicines); return result; } } result.put(tipoOperacionEmun, listaPosicines); continue; } while ((lastPosicionView = expresion.indexOf(tipoOperacionEmun.getRepresentacion(), lastPosicionView)) != -1) { if (!estaEntreParentesis(mapaParentesis, lastPosicionView) && operacionInequivoca( tipoOperacionEmun, expresion.substring(lastPosicionView - 1, lastPosicionView + 2))) listaPosicines.add(lastPosicionView); lastPosicionView++; } result.put(tipoOperacionEmun, listaPosicines); } return result; }