im String ersetzen, wenn...

StringTokenizer tk = new StringTokenizer(str, "/ * usw.");
int counter = 0;
String myTk = null;
String editedString = null;
while(tk.hasMoreTokens())
{
myTk = tk.nextToken();
System.out.println(myTk);
counter = ++;
if(counter == 3) editedString = editToken(myTk);
}

private String editToken (String toEdit)
{
String editedString = null;
// hier bearbeiten
return editedString
}
 
Zuletzt bearbeitet:
Wie mimij85 schon sagt, muß Du dann alle Token in eine ArrayLIst schreiben und kannst Du direkt über den Index auf ein Token zugreifen:

Java:
import java.util.ArrayList;
import java.util.StringTokenizer;

public class StrTokenizerExample {
	
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		
		String str 			   = "Ich bin mal ein längerer unsinniger Satz " +
							 	 "ohne jegliche Bedeutung.";
		StringTokenizer strTk  = new StringTokenizer(str);
		ArrayList       tkList = new ArrayList();
		while (strTk.hasMoreTokens()) {
			tkList.add(strTk.nextToken().toString());
		}
		System.out.println(tkList.get(2));
		
		
	}
}
 
Zuletzt bearbeitet von einem Moderator:
StringTokenizer tk = new StringTokenizer(str, "/ * usw.");
int counter = 0;
String myTk = null;
String editedString = null;
while(tk.hasMoreTokens())
{
myTk = tk.nextToken();
System.out.println(myTk);
counter = ++;
if(counter == 3) editedString = editToken(myTk);
}

private String editToken (String toEdit)
{
String editedString = null;
// hier bearbeiten
return editedString
}


Andron, das ist ziemlich umstaendlich. Vorallem was soll
counter = ++;
Also mit ner Arrayliste, ist das wesentlich einfacher, man muss nicht jedes mal alle tokens durchlaufen, und kann direkt auf das jeweilige zugreifen :D

Und benutz bitte [.CODE] oder [.JAVA] :D, das ist besser zu lesen.
 
Das weiß ich doch.
Ich wollte nur veranschaulichen, wie man an die Tokens ran kommt.
Mit dem counter war ein Beispiel, wenn man nur das dritte Token lesen möchte.
 
Hallo,

warum so kompliziert? Statte alle deine "Variablen" einfach mit einem entsprechenden Präfix aus ($,#) und dann nimmst du alle alphanumerischen Zeichenfolgen die darauf folgen als Variablennamen...

Schau mal hier:
Java:
/**
 * 
 */
package de.tutorials;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import javax.script.Bindings;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;

/**
 * @author Thomas.Darimont
 *
 */
public class VariableExtractionExample {

  /**
   * @param args
   */
  public static void main(String[] args) throws Exception{
    
    String formula = "($a+$b32a*$cS_W12)*2";
    
    System.out.println(Arrays.toString(extractVariablesFrom(formula)));
    
    ScriptEngine scriptEngine = new ScriptEngineManager().getEngineByName("javascript");
    Bindings bindings = scriptEngine.createBindings();
    bindings.put("$a", 2);
    bindings.put("$b32a", 3);
    bindings.put("$cS_W12", 4);
    
    System.out.println(scriptEngine.eval(formula, bindings));

  }

  private static String[] extractVariablesFrom(String formula) {
    List<String> variables = new ArrayList<String>();
    
    Matcher matcher = Pattern.compile("(\\$[\\w\\d_]+)").matcher(formula);
    while(matcher.find()){
      variables.add(matcher.group());
    }
    
    return variables.toArray(new String[0]);
  }

}

Gruß Tom
 
Hi,

so, nach ewigem gemache und getue habe ich mir nun überlegt, dass ich mit einem StringTokenizer erstmal den Eingangsstring an gewissen Zeichen in einzelne Tokens zerlege. (das t erstmal)
Nun will ich diejenigen Tokens mit einem Wert ersetzen, die mit dem Suchwort übereinstimmen und auch noch die gleiche Länge wie das Suchwort haben. Somit würde z.B. sigma_v nicht ersetzt werden, weil es nicht die gleiche Länge hat, wie mein Suchwort.
Nur habe ich noch ein Problem: Wie bekomme ich dann wieder meinen Originalstring aus den einzelnen Tokens (veränderte und unveränderte) plus die originalen Zeichensetzungen zusammengesetzt?

Java:
String str = "sigma_v=sqrt(sigma^2+3*tau^2)";
String search = "sigma";
StringTokenizer tk = new StringTokenizer(str, "+ - * / ( ) ^ =");
int laenge = search.length();
			
while (tk.hasMoreTokens()){
     String tokens = tk.nextToken();
     int laenge_tokens = tokens.length();

     if(laenge == laenge_tokens){
          tokens = "XXX";
     }
}
//wie den Originalstring wieder zusammensetzen?

Danke und Gruß

PS: Ich hab nun mittlerweile soviel probiert, dass ich nunmehr keine andere Möglichkeit mehr sehe, wie ich irgendwelche 'Variablen'-Worte in einem STring korrekt ersetzen kann. (also sigma ersetzen, aber sigma_v unberührt lassen, wenn das Suchkriterium nach sigma-Übereinstimmung sucht)
 
Zuletzt bearbeitet:
Zurück