1 package org.dfdaemon.il2.core.util;
2
3
4
5
6 public class StringUtils {
7
8
9
10
11
12
13
14
15 public static String ascii2native(String theString) {
16 char aChar;
17 int len = theString.length();
18 StringBuffer outBuffer = new StringBuffer(len);
19
20 for (int x = 0; x < len;) {
21 aChar = theString.charAt(x++);
22 if (aChar == '\\') {
23 aChar = theString.charAt(x++);
24 if (aChar == 'u') {
25
26 int value = 0;
27 for (int i = 0; i < 4; i++) {
28 aChar = theString.charAt(x++);
29 switch (aChar) {
30 case '0':
31 case '1':
32 case '2':
33 case '3':
34 case '4':
35 case '5':
36 case '6':
37 case '7':
38 case '8':
39 case '9':
40 value = (value << 4) + aChar - '0';
41 break;
42 case 'a':
43 case 'b':
44 case 'c':
45 case 'd':
46 case 'e':
47 case 'f':
48 value = (value << 4) + 10 + aChar - 'a';
49 break;
50 case 'A':
51 case 'B':
52 case 'C':
53 case 'D':
54 case 'E':
55 case 'F':
56 value = (value << 4) + 10 + aChar - 'A';
57 break;
58 default:
59 throw new IllegalArgumentException("Malformed \\uxxxx encoding.");
60 }
61 }
62 outBuffer.append((char) value);
63 } else {
64 if (aChar == 't') {
65 aChar = '\t';
66 } else if (aChar == 'r') {
67 aChar = '\r';
68 } else if (aChar == 'n') {
69 aChar = '\n';
70 } else if (aChar == 'f') aChar = '\f';
71 outBuffer.append(aChar);
72 }
73 } else {
74 outBuffer.append(aChar);
75 }
76 }
77 return outBuffer.toString();
78 }
79
80
81
82
83
84
85
86
87
88
89 public static String native2ascii(String theString, boolean escapeSpace) {
90 int len = theString.length();
91 StringBuffer outBuffer = new StringBuffer(len * 2);
92
93 for (int x = 0; x < len; x++) {
94 char aChar = theString.charAt(x);
95 switch (aChar) {
96 case ' ':
97 if (x == 0 || escapeSpace) {
98 outBuffer.append('\\');
99 }
100
101 outBuffer.append(' ');
102 break;
103 case '\\':
104 outBuffer.append('\\');
105 outBuffer.append('\\');
106 break;
107 case '\t':
108 outBuffer.append('\\');
109 outBuffer.append('t');
110 break;
111 case '\n':
112 outBuffer.append('\\');
113 outBuffer.append('n');
114 break;
115 case '\r':
116 outBuffer.append('\\');
117 outBuffer.append('r');
118 break;
119 case '\f':
120 outBuffer.append('\\');
121 outBuffer.append('f');
122 break;
123 default:
124 if ((aChar < 0x0020) || (aChar > 0x007e)) {
125 outBuffer.append('\\');
126 outBuffer.append('u');
127 outBuffer.append(HEX_DIGIT[((aChar >> 12) & 0xF & 0xF)]);
128 outBuffer.append(HEX_DIGIT[((aChar >> 8) & 0xF & 0xF)]);
129 outBuffer.append(HEX_DIGIT[((aChar >> 4) & 0xF & 0xF)]);
130 outBuffer.append(HEX_DIGIT[(aChar & 0xF & 0xF)]);
131 } else {
132 if (SPECIAL_SAVE_CHARS.indexOf(aChar) != -1) {
133 outBuffer.append('\\');
134 }
135 outBuffer.append(aChar);
136 }
137 }
138 }
139 return outBuffer.toString();
140 }
141
142
143
144
145 private static final char[] HEX_DIGIT = {
146 '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'
147 };
148
149 private static final String SPECIAL_SAVE_CHARS = "= \t\r\n\f#";
150
151 }