[Java] replaceall() will nicht so wie ich will

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von Mr. Mouse, 26. Oktober 2011 .

Schlagworte:
Status des Themas:
Es sind keine weiteren Antworten möglich.
  1. 26. Oktober 2011
    replaceall() will nicht so wie ich will

    Hey,

    ich schreibe gerade an einem kleinen JavaProgramm und brauche eure Hilfe.

    Ich hab in einem String src den Quelltext einer Website gespeichert und möchte die dort vorkommenden HEX-Werte gegebn Symbole autauschen:

    %2F -> /
    %3F -> ?
    %3D -> =
    %25 -> %
    %26 -> &
    %2C -> ,

    Ich habs mit replaceall versucht:

    Code:
     private void decode() {
     src_dec = src.replaceAll("!%3A!", ":");
     src_dec.replaceAll("!%2F!", "/");
     src_dec.replaceAll("!%3F!", "?");
     src_dec.replaceAll("!%3D!", "=");
     src_dec.replaceAll("!%25!", "%");
     src_dec.replaceAll("!%26!", "&");
     src_dec.replaceAll("!%2C!", ",");
     }
    Ob ich den limiter beim ersten parameter brauche, weiss ich nicht, es geht aber auch ohne nicht.

    Kann mir da jemand helfen?
     
  2. 26. Oktober 2011
    AW: replaceall() will nicht so wie ich will

    die Methode liefert den geänderten Wert zurück, also musst du die Variable ständig neu setzen:

    Code:
     private void decode() {
     src_dec = src.replaceAll("!%3A!", ":");
     src_dec = src.replaceAll("!%2F!", "/");
     src_dec = src.replaceAll("!%3F!", "?");
     src_dec = src.replaceAll("!%3D!", "=");
     src_dec = src.replaceAll("!%25!", "%");
     src_dec = src.replaceAll("!%26!", "&");
     src_dec = src.replaceAll("!%2C!", ",");
     }
    
     
  3. 26. Oktober 2011
    AW: replaceall() will nicht so wie ich will

    Das klappt iwie auch nicht.

    Ich hab halt in der Variable src den "kodierten" quelltext
    und der soll "uukodiert" in src_enc gespeichert werden.
     
  4. 26. Oktober 2011
    AW: replaceall() will nicht so wie ich will

    Unix hat schon recht, aber da hat sich wohl ein Flüchtigkeitsfehler eingeschlichen

    Code:
     private void decode() {
     src_dec = src.replaceAll("!%3A!", ":");
     src_dec = src_dec.replaceAll("!%2F!", "/");
     src_dec = src_dec.replaceAll("!%3F!", "?");
     src_dec = src_dec.replaceAll("!%3D!", "=");
     src_dec = src_dec.replaceAll("!%25!", "%");
     src_dec = src_dec.replaceAll("!%26!", "&");
     src_dec = src_dec.replaceAll("!%2C!", ",");
     }
    
     
  5. 26. Oktober 2011
    AW: replaceall() will nicht so wie ich will

    irgendwie wills immer noch net -.- hier mal die ganze klasse:

    Code:
    import java.io.IOException; 
    import java.io.InputStream; 
    import java.net.URL; 
    import java.util.Scanner; 
    import java.util.regex.Matcher;
    import java.util.regex.Pattern;
    
    
    public class youtube {
     
     private String video_url;
     private String dl_url; // Direktlink zur .flv-Datei
     private String src; // Quelltext der Seite des Videos
     private String src_dec;
     private InputStream is = null;
     
     public youtube(String url) {
     video_url = url;
     src = this.getSrc();
     this.decode();
     //dl_url = this.filterSrc();
     }
     
     private String getSrc() {
     String tmp = "";
     try {
     URL url = new URL(video_url);
     is = url.openStream();
     tmp = new Scanner(is).useDelimiter("//html//").next();
     } catch(Exception e) {
     e.printStackTrace();
     } finally {
     if(is != null) {
     try { is.close(); }
     catch(IOException e) {}
     }
     }
     return tmp;
     }
     
     private void decode() {
     src_dec = src.replaceAll("!%3A!", ":");
     src_dec = src_dec.replaceAll("!%2F!", "/");
     src_dec = src_dec.replaceAll("!%3F!", "?");
     src_dec = src_dec.replaceAll("!%3D!", "=");
     src_dec = src_dec.replaceAll("!%25!", "%");
     src_dec = src_dec.replaceAll("!%26!", "&");
     src_dec = src_dec.replaceAll("!%2C!", ",");
     }
     
     private String filterSrc() {
     String tmp = "";
     Pattern p = Pattern.compile("\"~\"url_encoded_fmt_stream_map\": \"url=(.*?)\"~", Pattern.CASE_INSENSITIVE);
     Matcher m = p.matcher(src_dec);
     tmp = m.group();
     return tmp;
     }
     
     public String getLink() {
     return dl_url;
     }
     
     public String showSrc() {
     return src_dec;
     }
     
    }
    
    und wenn ich ein youtube objekt erzeuge und die methode showSrc() aufrufe, krieg ich immer noch den encodeten quelltext...

    //edit

    unter PHP mit str_replace gehts ja komischerweise.
     
  6. 26. Oktober 2011
    AW: replaceall() will nicht so wie ich will

    Achso, jetzt fällts mir erst auf. Du benutzt replaceAll. Da brauchst du nen Regex und die Syntax ist unter Java anders als bei PHP wenn ich mich nicht täusche. Aber hier reicht String#replace auch völlig, das ersetzt auch alle Vorkommnisse. Also:
    Code:
    private void decode() {
     src_dec = src.replace("%3A", ":");
     src_dec = src_dec.replace("%2F", "/");
     ...
     }
    
     
  7. 26. Oktober 2011
    AW: replaceall() will nicht so wie ich will

    Okay ich habs hinbekommen. Irgendwie zerbastelt der Delimiter vom Scanner den Code ein bisschen, aber hiermit gehts, für die die es interessiert:

    Code:
     private void decode() { 
     src_dec = src.replace("%253A", ":");
     src_dec = src_dec.replace("%252F", "/");
     src_dec = src_dec.replace("%253F", "?");
     src_dec = src_dec.replace("%253D", "=");
     src_dec = src_dec.replace("%2525", "%");
     src_dec = src_dec.replace("%2526", "&");
     src_dec = src_dec.replace("%252C", ",");
     src_dec = src_dec.replace("%3A", ":");
     src_dec = src_dec.replace("%2F", "/");
     src_dec = src_dec.replace("%3F", "?");
     src_dec = src_dec.replace("%3D", "=");
     src_dec = src_dec.replace("%25", "%");
     src_dec = src_dec.replace("%26", "&");
     src_dec = src_dec.replace("%2C", ",");
     }
    Danke für die Hilfe
     
  8. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.