2013-05-22 21 views
7

的多次出現,我發現更換字符

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

果然4A到AAAA,3B爲BBB等等...我需要相反的,我無法弄清楚。我需要將aaaa變成4a,將bbb變成3b等等。非常感謝

+1

Escape'.'就像這樣'\\。'。請注意'replaceAll'採用** regex **而不是String。 ('.'在正則表達式中有特殊含義) – Maroun

+0

String file = new Scanner(new File(「Jutt.txt」))。useDelimiter(「\\ A」)。next(); \t \t String seq =「123456789」; \t \t String regex = seq.replaceAll(「\\。」,「(?= [$ 0-9]([a-z]))?」)+「[0-9] [a-z]」; \t \t String repl = seq.replaceAll(「\\。」,「\\ $$ 0」); \t \t \t \t file = file.replaceAll(repl,regex); 代碼稍長一點。我需要從1個文件複製文本到另一個文件,使用一些修改,如前所述「我需要將aaaa變成4a,bbb變成3b等等」。目前它正在做相反的操作:( – user2408677

+0

他使用字符串'1..9'來生成正則表達式:'(?= [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]'用於替換'$ 1 $ 2 $ 3 $ 4 $ 5 $ 6 $ 7 $ 8 $ 9'來將'4a'變成'aaaa'。 [0-9] [az]'。對我來說,就像你可能不希望用正則表達式做的那樣... – rvalvik

回答

1

這裏是一個遊程長度編碼/解碼的實施在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")); 
    } 
} 

從這裏摘自:

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

(當前頁包括在相同的例子72種不同的編程語言來實現相同的目標)

要達到你所要求的,你可以使用「enco de「方法。

這裏測試:http://www.browxy.com/SubmittedCode/21369

正則表達式對自己是不是努力實現這一目標的合適工具。