/*************************************************** * * cismet GmbH, Saarbruecken, Germany * * ... and it just works. * ****************************************************/ package Sirius.navigator.tools; /******************************************************************************* Copyright (c) : EIG (Environmental Informatics Group) http://www.htw-saarland.de/eig Prof. Dr. Reiner Guettler Prof. Dr. Ralf Denzer HTWdS Hochschule fuer Technik und Wirtschaft des Saarlandes Goebenstr. 40 66117 Saarbruecken Germany Programmers : Project : WuNDA 2 Filename : Version : 1.0 Purpose : Created : 03.08.2000 History : *******************************************************************************/ import java.util.Vector; /** * Eine Klasse zum parsen bzw. zum parametrisieren von Strings * * @version $Revision$, $Date$ */ public class StringParameterizer { //~ Methods ---------------------------------------------------------------- /** * Statische Methode zum parsen eines Strings. * * @param string Der zu parsende String * @param tagOpen markiert den Anfang eines tokens * @param tagClose tagOpen markiert das Ende eines tokens * * @return Ein Array mit allen gefundenen Parametern */ public static String[] parseString(final String string, final char tagOpen, final char tagClose) { int depth = 0; final Vector tokens = new Vector(); StringBuffer currentToken = new StringBuffer(); final StringBuffer buffer = new StringBuffer(string); for (int i = 0; i < buffer.length(); i++) { final char currentChar = buffer.charAt(i); if ((currentChar == tagOpen) && (++depth > 1)) { currentToken.append(currentChar); } else if ((currentChar == tagClose) && (--depth >= 1)) { currentToken.append(currentChar); } else if ((depth > 0) && (currentChar != tagOpen) && (currentChar != tagClose)) { currentToken.append(currentChar); } if ((depth == 0) && (currentToken.length() > 0)) { tokens.addElement(currentToken.toString()); currentToken = new StringBuffer(); } } return (String[])tokens.toArray(new String[tokens.size()]); } /** * Statische Methode zum parametrisieren eines Strings.<br> * Platzhalter werden durch die entsprechenden Werte ersetzt. Die Anzahl der Platzhalter muss gleich der Anzahl der * Werte sein, sonst liefert die Funktion null. * * @param string Der zu parametrisierende String. * @param tokens Die Platzhalter die ersetzt werden sollen. * @param values Die Werte, mit denen die Platzhalter ersetzt werden. * * @return Der parametrisierte String, oder null. * * @throws Exception DOCUMENT ME! */ public static String parameterizeString(final String string, final String[] tokens, final String[] values) throws Exception { if ((string == null) || (tokens == null) || (values == null) || (tokens.length != values.length)) { throw new Exception("# of Tokens and Values is unequal"); // NOI18N } // Hier muss mit String und StringBuffer gearbeitet werden, da StringBuffer // keine Methode indexOf(...) und String kein Methode replace(...) hat. %o| String parameterizedString = string; final StringBuffer stringBuffer = new StringBuffer(string); int pos = 0; for (int i = 0; i < tokens.length; i++) { if (tokens[i] == null) { throw new Exception("Token is NULL"); // NOI18N } if (values[i] == null) { throw new Exception("Value is NULL"); // NOI18N } pos = parameterizedString.indexOf(tokens[i]); // NavigatorLogger.printMessage(pos + " : " + tokens[i] + " = " + values[i]); // -1 und +1 um die Delimeter zu entfernen stringBuffer.replace(pos - 1, pos + tokens[i].length() + 1, values[i]); parameterizedString = stringBuffer.toString(); } return parameterizedString; } /** * DOCUMENT ME! * * @param args DOCUMENT ME! */ public static void main(final String[] args) { // try // { //// String parseThis = "http://134.96.158.150:8080/sachdatenabfrage/abfrage1.pl?benutzer=$�$�&=$c.id�&objekt=$o.id�&attribut=$o_a_name.isba_nummer�"; //// System.out.println(parseThis); //// String[] tokens = StringParameterizer.parseString(parseThis, '$' , '�' ); //// for(int i = 0; i < tokens.length; i++) //// System.out.println("Token " + i + ": " + tokens[i]); //// //NavigatorLogger.printMessage(StringParameterizer.parameterizeString(parseThis, tokens, new String[] {"Penner", "unter der Bruecke", "666", "4711", "Assi"})); //// } //// catch (Exception e) //// { // e.printStackTrace(); // } } }