2013-05-22 25 views
7

Ich fandErsetzen mehr Vorkommen von Zeichen

String seq = "123456789"; 
    String regex = seq.replaceAll(".", "(?=[$0-9]([a-z]))?") + "[0-9][a-z]"; 
    String repl = seq.replaceAll(".", "\\$$0"); 

Welche 4a in aaaa dreht, 3b in bbb und so weiter ... Ich brauche das Gegenteil, und ich kann es nicht herausgefunden. Ich muss aaaa in 4a, bbb in 3b und so weiter machen. Vielen Dank

+1

Escape '.' wie folgt' \\. '. Beachten Sie, dass 'replaceAll 'einen ** Regex ** und keine Zeichenfolge verwendet. ('.' hat eine besondere Bedeutung in Regex) – Maroun

+0

Zeichenkette = neuer Scanner (neue Datei (" Jutt.txt ")). useDelimiter (" \\ A "). next(); \t \t Zeichenfolge seq = "123456789"; \t \t Zeichenfolge regex = seq.replaceAll ("\\.", "(? = [$ 0-9] ([a-z]))?") + "[0-9] [a-z]"; \t \t Zeichenfolge repl = seq.replaceAll ("\\.", "\\ $$ 0"); \t \t \t \t Datei = file.replaceAll (repl, Regex); Ein bisschen länger Teil des Codes. Ich muss Text von einer Datei in eine andere kopieren, mit ein paar Modifikationen, wie gesagt "Ich muss aaaa in 4a, bbb in 3b und so weiter." Im Moment macht es das Gegenteil :( – user2408677

+0

Er verwendet die Zeichenfolge '1..9', um eine Regex zu erzeugen:' (? = [1-9] ([az]))? (? = [2-9] ([az]))? (? = [3-9] ([az]))? (? = [4-9] ([az]))? (? = [5-9] ([az])) (? = [6-9] ([az]))? (? = [7-9] ([az]))? (? = [8-9] ([az]))? (? = [ 9-9] ([az])) [0-9] [az] 'und benutzt das mit dem Ersatz $ 1 $ 2 $ 3 $ 4 $ 5 $ 6 $ 7 $ 8 $ 9', um' 4a' in 'aaaa' zu verwandeln [0-9] [az] '. Scheint mir etwas zu sein, das du vielleicht nicht mit Regex machen willst ... – rvalvik

Antwort

1

Hier ist ein Beispiel für eine Lauflänge-Codierung/Decodierung Implementierung in Java:

import java.util.regex.Matcher; 
import java.util.regex.Pattern; 
public class RunLengthEncoding { 

    public static String encode(String source) { 
     StringBuffer dest = new StringBuffer(); 
     for (int i = 0; i < source.length(); i++) { 
      int runLength = 1; 
      while (i+1 < source.length() && source.charAt(i) == source.charAt(i+1)) { 
       runLength++; 
       i++; 
      } 
      dest.append(runLength); 
      dest.append(source.charAt(i)); 
     } 
     return dest.toString(); 
    } 

    public static String decode(String source) { 
     StringBuffer dest = new StringBuffer(); 
     Pattern pattern = Pattern.compile("[0-9]+|[a-zA-Z]"); 
     Matcher matcher = pattern.matcher(source); 
     while (matcher.find()) { 
      int number = Integer.parseInt(matcher.group()); 
      matcher.find(); 
      while (number-- != 0) { 
       dest.append(matcher.group()); 
      } 
     } 
     return dest.toString(); 
    } 

    public static void main(String[] args) { 
     String example = "WWWWWWWWWWWWBWWWWWWWWWWWWBBBWWWWWWWWWWWWWWWWWWWWWWWWBWWWWWWWWWWWWWW"; 
     System.out.println(encode(example)); 
     System.out.println(decode("1W1B1W1B1W1B1W1B1W1B1W1B1W1B")); 
    } 
} 

von hier genommen:

http://rosettacode.org/wiki/Run-length_encoding

(Diese Seite enthält äquivalente Beispiele in 72 verschiedene Programmiersprachen, um das gleiche Ziel zu erreichen)

Um zu erreichen, wonach Sie fragen, würden Sie das "enc de "Methode.

hier getestet: http://www.browxy.com/SubmittedCode/21369

Regex auf eigenem kein geeignetes Instrument ist dies für den Versuch, zu erreichen.

Verwandte Themen