中级农民
- 积分
- 105
- 大米
- 颗
- 鳄梨
- 个
- 水井
- 尺
- 蓝莓
- 颗
- 萝卜
- 根
- 小米
- 粒
- 学分
- 个
- 注册时间
- 2017-2-8
- 最后登录
- 1970-1-1
|
下周同电面FB,试着写了下, 不知道是否完整
- import java.util.*;
- class test{
- public static void main(String[] args) {
- String[][] arr = {{"abc", "cde"},
- {"a\"bc", "cde"},
- {"a;bc", "cde"},
- {"\"a;bc", "cde"},
- {"a\"\"bc", "cde"},
- {"a;b;c", "cde"}};
- String[] decodeArr = {"abc;cde",
- "a\"\"bc;cde",
- "\"a;bc\";cde",
- "\"\"\"a;bc\";cde",
- "a\"\"\"\"bc;cde",
- "\"a;b;c\";cde"
- };
- int idx = 0;
- for(String[] str : arr) {
- System.out.println(encode(str).equals(decodeArr[idx++]));
- }
- idx = 0;
- for(String str : decodeArr) {
- System.out.println(print(decode(str)).equals(arr[idx][0] + ";" +arr[idx++][1]));
- }
-
- }
- private static String encode(String[] arr) {
- StringBuilder sb = new StringBuilder();
- for(String str : arr) {
- StringBuilder tmp = new StringBuilder();
- boolean hasSemi = false;
- if(str.indexOf(";") != -1) {
- hasSemi = true;
- }
-
- for(char c : str.toCharArray()) {
- if(c == '"') {
- tmp.append(c).append(c);
- }else{
- tmp.append(c);
- }
- }
- if(hasSemi) {
- tmp.insert(0,'"');
- tmp.append('"');
- }
- sb.append(tmp.toString()).append(";");
- }
- if(sb.length() > 0){
- sb.deleteCharAt(sb.length() - 1);
- }
-
- return sb.toString();
- }
- private static String[] decode(String str) {
- List<String> res = new ArrayList<>();
- int left = 0;
- for(int i = 0; i<str.length(); i++) {
- left = i;
- if(str.charAt(left) != '"') {
- while(i < str.length() && str.charAt(i) != ';') {
- i++;
- }
- res.add(format(str.substring(left, i)));
- }else{
- int count = 0;
- while(i < str.length()) {
- if(str.charAt(i) == ';' && count % 2 == 0) {
- break;
- }else if(str.charAt(i) == '"') {
- count++;
- }
- i++;
- }
- res.add(format(str.substring(left + 1, i - 1)));
- }
- }
- String[] ans = new String[res.size()];
- for(int i = 0; i<ans.length; i++) {
- ans[i] = res.get(i);
- }
- return ans;
- }
- private static String format(String str) {
- StringBuilder sb = new StringBuilder();
- int count = 1;
- for(char c : str.toCharArray()) {
- if(c == '"') {
- if(count == 1){
- count++;
- continue;
- }else{
- sb.append('"');
- count = 1;
- }
- }else{
- sb.append(c);
- }
- }
- return sb.toString();
- }
- private static String print(String[] arr) {
- StringBuilder sb = new StringBuilder();
- for(String str : arr) {
- sb.append(str).append(";");
- }
- sb.deleteCharAt(sb.length() - 1);
- return sb.toString();
- }
- }
复制代码 |
|