Sto cercando uno strumento come Java String Analysis (JSA) che potrebbe riassumere una stringa come espressione regolare. Ho provato a farlo con JSA, ma ho bisogno di cercare un metodo specifico come StringBuffer.append o altre operazioni sulle stringhe.Analisi stringa Java per completa espressione regolare stringa
devo stringhe del genere:
StringBuilder test=new StringBuilder("hello ");
boolean codition=false;
if(codition){
test.append("world");
}
else{
test.append("other world");
}
test.append(" so far");
for(int i=0;i<args.length;i++){
test.append(" again hello");
}
// regularExpression = "hello (world| other world) so far(again hello)*"
E la mia implementazione JSA sembra che finora:
public static void main(String[] args) {
StringAnalysis.addDirectoryToClassPath("bootstrap.jar");
StringAnalysis.loadClass("org.apache.catalina.loader.Extension");
List<ValueBox> list = StringAnalysis.getArgumentExpressions("<java.lang.StringBuffer: java.lang.StringBuffer append(java.lang.String)>", 0);
StringAnalysis sa = new StringAnalysis(list);
for (ValueBox e : list) {
Automaton a = sa.getAutomaton(e);
if (a.isFinite()) {
Iterator<String> si = a.getFiniteStrings().iterator();
StringBuilder sb = new StringBuilder();
while (si.hasNext()) {
sb.append((String) si.next());
}
System.out.println(sb.toString());
} else if (a.complement().isEmpty()) {
System.out.println(e.getValue());
} else {
System.out.println("common prefix:" + a.getCommonPrefix());
}
}
}
sarei molto apprezzato per qualsiasi aiuto con lo strumento JSA o per un suggerimento a un altro strumento. Il mio più grande problema con la regex la struttura del flusso di controllo attorno alla costante di stringa.
Che cosa intendi esattamente per "riassumere una stringa come espressione regolare"? –
Voglio dire che, come nell'esempio sopra: Ci sono diverse costanti di stringa e variabili stringa, che sono sparse nel grafico del flusso di controllo e voglio una rappresentazione come nel commento. Se due o più stringhe sono in un if-block, allora voglio che le stringhe nella parte if siano di fronte al segno | -or-regex-e quelle nella parte else dopo di esso. E così via. Risponde alla tua domanda? Grazie per il vostro interesse. –
Puoi specificare i dati di input e output del tuo algoritmo? – srs