這裏是一個遊程長度編碼/解碼的實施在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
正則表達式對自己是不是努力實現這一目標的合適工具。
Escape'.'就像這樣'\\。'。請注意'replaceAll'採用** regex **而不是String。 ('.'在正則表達式中有特殊含義) – Maroun
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
他使用字符串'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