import java.util.*;
class Main {
static final char DELIM = ';';
static final char ESCAPE = ':';
public static void main
(String[] args
) {
String concat
= concat
(a,b,c,d,e,f,g
);
String[] tokens
= split
(concat
);
int pos = 0;
System.
out.
println(test
(a,tokens
[pos
++])); System.
out.
println(test
(b,tokens
[pos
++])); System.
out.
println(test
(c,tokens
[pos
++])); System.
out.
println(test
(d,tokens
[pos
++])); System.
out.
println(test
(e,tokens
[pos
++])); System.
out.
println(test
(f,tokens
[pos
++])); System.
out.
println(test
(g,tokens
[pos
++])); }
StringBuilder sb = new StringBuilder();
String r
= s.
replace(e, ee
).
replace(d, ed
); System.
out.
println(s
+ " becomes " + r
); sb.append(r).append(d);
}
String fp
= sb.
toString().
substring(0,sb.
length() - 1); System.
out.
println("Final product:"); return fp; // trim off the last delim
}
List<String> tokens = new ArrayList<String>();
StringBuilder sb = new StringBuilder();
boolean escaped = false;
for(int i = 0; i < concat.length(); i++) {
char c = concat.charAt(i);
if(c == ESCAPE && !escaped) {
escaped = true;
continue;
}
if(c == DELIM && !escaped) {
tokens.add(sb.toString());
sb = new StringBuilder();
continue;
}
sb.append(c);
escaped = false;
}
tokens.add(sb.toString());
return tokens.
toArray(new String[0]); }
return "Expected '" + exp + "', Actual '" + act + "', Matches " + exp.equals(act);
}
}
aW1wb3J0IGphdmEudXRpbC4qOwpjbGFzcyBNYWluIHsKICAgIHN0YXRpYyBmaW5hbCBjaGFyIERFTElNID0gJzsnOwogICAgc3RhdGljIGZpbmFsIGNoYXIgRVNDQVBFID0gJzonOwogICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgIFN0cmluZyBhID0gImFiYztkZWYiOwogICAgICAgIFN0cmluZyBiID0gImphOjNmciI7CiAgICAgICAgU3RyaW5nIGMgPSAiOyI7CiAgICAgICAgU3RyaW5nIGQgPSAiIjsKICAgICAgICBTdHJpbmcgZSA9ICI6IjsKICAgICAgICBTdHJpbmcgZiA9ICI4Mzs6Ozo7Ozs7IjsKICAgICAgICBTdHJpbmcgZyA9ICI6OyI7CiAgICAgICAgCiAgICAgICAgU3RyaW5nIGNvbmNhdCA9IGNvbmNhdChhLGIsYyxkLGUsZixnKTsKICAgICAgICAKICAgICAgICBTdHJpbmdbXSB0b2tlbnMgPSBzcGxpdChjb25jYXQpOwogICAgICAgIAogICAgICAgIGludCBwb3MgPSAwOwogICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbih0ZXN0KGEsdG9rZW5zW3BvcysrXSkpOwogICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbih0ZXN0KGIsdG9rZW5zW3BvcysrXSkpOwogICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbih0ZXN0KGMsdG9rZW5zW3BvcysrXSkpOwogICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbih0ZXN0KGQsdG9rZW5zW3BvcysrXSkpOwogICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbih0ZXN0KGUsdG9rZW5zW3BvcysrXSkpOwogICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbih0ZXN0KGYsdG9rZW5zW3BvcysrXSkpOwogICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbih0ZXN0KGcsdG9rZW5zW3BvcysrXSkpOwogICAgfQogICAgCiAgICBzdGF0aWMgU3RyaW5nIGNvbmNhdChTdHJpbmcuLi4gc3MpIHsKICAgICAgICBTdHJpbmdCdWlsZGVyIHNiID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKICAgICAgICBmaW5hbCBTdHJpbmcgZSA9IFN0cmluZy52YWx1ZU9mKEVTQ0FQRSk7CiAgICAgICAgZmluYWwgU3RyaW5nIGVlID0gZSArIEVTQ0FQRTsKICAgICAgICBmaW5hbCBTdHJpbmcgZCA9IFN0cmluZy52YWx1ZU9mKERFTElNKTsKICAgICAgICBmaW5hbCBTdHJpbmcgZWQgPSBlICsgZDsKICAgICAgICBmb3IoU3RyaW5nIHMgOiBzcykgewogICAgICAgICAgICBTdHJpbmcgciA9IHMucmVwbGFjZShlLCBlZSkucmVwbGFjZShkLCBlZCk7CiAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihzICsgIiBiZWNvbWVzICIgKyByKTsKICAgICAgICAgICAgc2IuYXBwZW5kKHIpLmFwcGVuZChkKTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgU3RyaW5nIGZwID0gc2IudG9TdHJpbmcoKS5zdWJzdHJpbmcoMCxzYi5sZW5ndGgoKSAtIDEpOwogICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRmluYWwgcHJvZHVjdDoiKTsKICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oZnApOwogICAgICAgIHJldHVybiBmcDsgLy8gdHJpbSBvZmYgdGhlIGxhc3QgZGVsaW0KICAgIH0KICAgIAogICAgc3RhdGljIFN0cmluZ1tdIHNwbGl0KFN0cmluZyBjb25jYXQpIHsKICAgICAgICBMaXN0PFN0cmluZz4gdG9rZW5zID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KCk7CiAgICAgICAgU3RyaW5nQnVpbGRlciBzYiA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7CiAgICAgICAgYm9vbGVhbiBlc2NhcGVkID0gZmFsc2U7CiAgICAgICAgZm9yKGludCBpID0gMDsgaSA8IGNvbmNhdC5sZW5ndGgoKTsgaSsrKSB7CiAgICAgICAgICAgIGNoYXIgYyA9IGNvbmNhdC5jaGFyQXQoaSk7CiAgICAgICAgICAgIGlmKGMgPT0gRVNDQVBFICYmICFlc2NhcGVkKSB7CiAgICAgICAgICAgICAgICBlc2NhcGVkID0gdHJ1ZTsKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmKGMgPT0gREVMSU0gJiYgIWVzY2FwZWQpIHsKICAgICAgICAgICAgICAgIHRva2Vucy5hZGQoc2IudG9TdHJpbmcoKSk7CiAgICAgICAgICAgICAgICBzYiA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7CiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgfQogICAgICAgICAgICBzYi5hcHBlbmQoYyk7CiAgICAgICAgICAgIGVzY2FwZWQgPSBmYWxzZTsKICAgICAgICB9CiAgICAgICAgdG9rZW5zLmFkZChzYi50b1N0cmluZygpKTsKICAgICAgICByZXR1cm4gdG9rZW5zLnRvQXJyYXkobmV3IFN0cmluZ1swXSk7CiAgICB9CiAgICAKICAgIHN0YXRpYyBTdHJpbmcgdGVzdChTdHJpbmcgZXhwLCBTdHJpbmcgYWN0KSB7CiAgICAgICAgcmV0dXJuICJFeHBlY3RlZCAnIiArIGV4cCArICInLCBBY3R1YWwgJyIgKyBhY3QgKyAiJywgTWF0Y2hlcyAiICsgZXhwLmVxdWFscyhhY3QpOwogICAgfQp9
abc;def becomes abc:;def
ja:3fr becomes ja::3fr
; becomes :;
becomes
: becomes ::
83;:;:;;;; becomes 83:;:::;:::;:;:;:;
:; becomes :::;
Final product:
abc:;def;ja::3fr;:;;;::;83:;:::;:::;:;:;:;;:::;
Expected 'abc;def', Actual 'abc;def', Matches true
Expected 'ja:3fr', Actual 'ja:3fr', Matches true
Expected ';', Actual ';', Matches true
Expected '', Actual '', Matches true
Expected ':', Actual ':', Matches true
Expected '83;:;:;;;;', Actual '83;:;:;;;;', Matches true
Expected ':;', Actual ':;', Matches true