2017-12-06 1 views
0

Ich arbeite mit SNMP4J und lasse erfolgreich kommagetrennte Strings ausgeben (aus SNMP Traps).Zeige spezifische Elemente in einem kommagetrennten Stringbuffer

d.h.

StringBuffer msg = new StringBuffer(); 
msg.append(event.toString()); 
Vector<? extends VariableBinding> varBinds = event.getPDU().getVariableBindings(); 
if (varBinds != null && !varBinds.isEmpty()) { 
    Iterator<? extends VariableBinding> varIter = varBinds.iterator(); 
    while (varIter.hasNext()) { 
     VariableBinding var = varIter.next(); 
     msg.append(var.toString()).append(";"); 
    } 
} 
System.out.println("Message Received: " + msg.toString()); 

Ausgänge -

Message Received: CommandResponderEvent[securityModel=1, securityLevel=1, maxSizeResponsePDU=65535, etc etc 

Neben der gesamte Ausgabezeichenfolge I bestimmte Elemente angezeigt werden müssen (insbesondere

peerAddress=192.168.150.210/61263 

und

VBS[1.3.6.1.4.1.332.10.14.19.11.0 = Fire]] 

aber nur im Idealfall der IP-Adressteil (192.168.150.210) und die ‚Bedeutung‘ (Feuer)

verwende ich spalte bestimmte Elemente zu finden und dann diejenigen String oder gibt es einen besseren Weg?

String sixth_word = msg.toString().split(",")[6]; 
+0

Warum setzen Sie die Informationen in einem String, wenn man nur die Veranstaltung rufen [getPeerAddress] (http://www.snmp4j.org/ doc/org/snmp4j/CommandResponderEvent.html # getPeerAddress()) Methode und die Methoden von [Variable] (http://www.snmp4j.org/doc/org/snmp4j/smi/Variable.html) und ihren Unterklassen, um die Daten direkt zu bekommen? – VGR

+0

Hallo VGR, ich brauche sowohl die gesamte Zeichenkette als auch einzelne Elemente, könntest du weiter ausbauen wie ich nur sagen würde die getPeerAddress (ich bin ein Neuling). Danke – Active

Antwort

0

Sie einen String nicht benötigen, da Sie String.join haben:

String msg = event + " " + String.join(";", event.getPDU().getVariableBindings()); 

persönlich für eine Diagnosemeldung, würde ich nicht einmal mit String.Join Mühe:

String msg = event + " " + event.getPDU().getVariableBindings(); 

Das Lesen der Dokumentation der Klassen, die Sie verwenden, wird einen langen Weg zeigen, Ihnen zu zeigen, was Ihnen zur Verfügung steht. Wenn Sie the documentation for CommandResponderEvent lesen, sehen Sie, es öffentliche Methoden, die die Daten liefern, die Sie wünschen:

String peerAddress = event.getPeerAddress().toString(); 

am documentation of VariableBinding suchen, können wir sehen, dass es eine getVariable() Methode hat. Jede Bindung der Variable ist, wo die „Fire“ Text herkommt:

List<String> variables = new ArrayList<>(); 
for (VariableBinding binding : event.getPDU().getVariableBindings()) { 
    variables.add(String.valueOf(binding.getVariable())); 
} 
+0

Danke VGR, ich hatte entdeckt, wie man die PeerAddress erhält, aber die Variablen sind etwas anderes, es scheint einige Syntaxfehler in Ihrer Methode getVariable zu geben. – Active

+0

Ich habe SNMP4J nicht installiert, daher kann ich den Code im Moment nicht kompilieren. Vielleicht könnten Sie näher auf den Fehler eingehen, den Sie sehen? – VGR

+0

Es scheint Chevrons um und ArrayList <> zu geben, nicht sicher, ob das korrekt ist und kein Symbol finden kann ArrayList – Active

Verwandte Themen