Not logged in.  Login/Logout/Register | List snippets | | Create snippet | Upload image | Upload data

83
LINES

< > BotCompany Repo | #2000515 // function unquote, fixed 2

New Tinybrain snippet

1  
  public static String unquote(String s) {
2  
    if (s.startsWith("[")) {
3  
      int i = 1;
4  
      while (i < s.length() && s.charAt(i) == '=') ++i;
5  
      if (i < s.length() && s.charAt(i) == '[') {
6  
        String m = s.substring(1, i);
7  
        if (s.endsWith("]" + m + "]"))
8  
          return s.substring(i+1, s.length()-i-1);
9  
      }
10  
    }
11  
    
12  
    if (s.startsWith("\"") && s.endsWith("\"") && s.length() > 1) {
13  
      String st = s.substring(1, s.length()-1);
14  
      StringBuilder sb = new StringBuilder(st.length());
15  
  
16  
      for (int i = 0; i < st.length(); i++) {
17  
        char ch = st.charAt(i);
18  
        if (ch == '\\') {
19  
          char nextChar = (i == st.length() - 1) ? '\\' : st
20  
                  .charAt(i + 1);
21  
          // Octal escape?
22  
          if (nextChar >= '0' && nextChar <= '7') {
23  
              String code = "" + nextChar;
24  
              i++;
25  
              if ((i < st.length() - 1) && st.charAt(i + 1) >= '0'
26  
                      && st.charAt(i + 1) <= '7') {
27  
                  code += st.charAt(i + 1);
28  
                  i++;
29  
                  if ((i < st.length() - 1) && st.charAt(i + 1) >= '0'
30  
                          && st.charAt(i + 1) <= '7') {
31  
                      code += st.charAt(i + 1);
32  
                      i++;
33  
                  }
34  
              }
35  
              sb.append((char) Integer.parseInt(code, 8));
36  
              continue;
37  
          }
38  
          switch (nextChar) {
39  
          case '\\':
40  
              ch = '\\';
41  
              break;
42  
          case 'b':
43  
              ch = '\b';
44  
              break;
45  
          case 'f':
46  
              ch = '\f';
47  
              break;
48  
          case 'n':
49  
              ch = '\n';
50  
              break;
51  
          case 'r':
52  
              ch = '\r';
53  
              break;
54  
          case 't':
55  
              ch = '\t';
56  
              break;
57  
          case '\"':
58  
              ch = '\"';
59  
              break;
60  
          case '\'':
61  
              ch = '\'';
62  
              break;
63  
          // Hex Unicode: u????
64  
          case 'u':
65  
              if (i >= st.length() - 5) {
66  
                  ch = 'u';
67  
                  break;
68  
              }
69  
              int code = Integer.parseInt(
70  
                      "" + st.charAt(i + 2) + st.charAt(i + 3)
71  
                              + st.charAt(i + 4) + st.charAt(i + 5), 16);
72  
              sb.append(Character.toChars(code));
73  
              i += 5;
74  
              continue;
75  
          }
76  
          i++;
77  
        }
78  
        sb.append(ch);
79  
      }
80  
      return sb.toString();      
81  
    } else
82  
      return s; // return original
83  
  }

Author comment

Began life as a copy of #2000514

download  show line numbers   

Snippet is not live.

Travelled to 12 computer(s): aoiabmzegqzx, bhatertpkbcr, cbybwowwnfue, gwrvuhgaqvyk, ishqpsrjomds, lpdgvwnxivlt, mqqgnosmbjvj, pyentgdyhuwx, pzhvpgtvlbxg, tslmcundralx, tvejysmllsmz, vouqrxazstgt

Comments [hide]

ID Author/Program Comment Date
539 #1000610 Edit suggestion:
!636
!629

main {
static Object androidContext;
static String programID;

public static void main(String[] args) throws Exception {
public static String unquote(String s) {
if (s.startsWith("[")) {
int i = 1;
while (i < s.length() && s.charAt(i) == '=') ++i;
if (i < s.length() && s.charAt(i) == '[') {
String m = s.substring(1, i);
if (s.endsWith("]" + m + "]"))
return s.substring(i+1, s.length()-i-1);
}
}

if (s.startsWith("\"") && s.endsWith("\"") && s.length() > 1) {
String st = s.substring(1, s.length()-1);
StringBuilder sb = new StringBuilder(st.length());

for (int i = 0; i < st.length(); i++) {
char ch = st.charAt(i);
if (ch == '\\') {
char nextChar = (i == st.length() - 1) ? '\\' : st
.charAt(i + 1);
// Octal escape?
if (nextChar >= '0' && nextChar <= '7') {
String code = "" + nextChar;
i++;
if ((i < st.length() - 1) && st.charAt(i + 1) >= '0'
&& st.charAt(i + 1) <= '7') {
code += st.charAt(i + 1);
i++;
if ((i < st.length() - 1) && st.charAt(i + 1) >= '0'
&& st.charAt(i + 1) <= '7') {
code += st.charAt(i + 1);
i++;
}
}
sb.append((char) Integer.parseInt(code, 8));
continue;
}
switch (nextChar) {
case '\\':
ch = '\\';
break;
case 'b':
ch = '\b';
break;
case 'f':
ch = '\f';
break;
case 'n':
ch = '\n';
break;
case 'r':
ch = '\r';
break;
case 't':
ch = '\t';
break;
case '\"':
ch = '\"';
break;
case '\'':
ch = '\'';
break;
// Hex Unicode: u????
case 'u':
if (i >= st.length() - 5) {
ch = 'u';
break;
}
int code = Integer.parseInt(
"" + st.charAt(i + 2) + st.charAt(i + 3)
+ st.charAt(i + 4) + st.charAt(i + 5), 16);
sb.append(Character.toChars(code));
i += 5;
continue;
}
i++;
}
sb.append(ch);
}
return sb.toString();
} else
return s; // return original
}
}}
2015-08-18 19:11:55  delete 
537 #1000604 (pitcher) 2015-08-18 00:07:22

add comment

Snippet ID: #2000515
Snippet name: function unquote, fixed 2
Eternal ID of this version: #2000515/1
Text MD5: 5c5fc2d2c2a2d37a32c046be2966a586
Author: stefan
Category:
Type: New Tinybrain snippet
Public (visible to everyone): Yes
Archived (hidden from active list): No
Created/modified: 2015-08-10 19:29:29
Source code size: 2610 bytes / 83 lines
Pitched / IR pitched: No / Yes
Views / Downloads: 815 / 2585
Referenced in: [show references]