package org.test4j.json.encoder.single.fixed;
import java.io.IOException;
import java.io.Writer;
import org.test4j.json.encoder.single.FixedTypeEncoder;
public class StringEncoder extends FixedTypeEncoder<String> {
public static StringEncoder instance = new StringEncoder();
private StringEncoder() {
super(String.class);
}
@Override
public void encodeSingleValue(String target, Writer writer) throws Exception {
writer.append(quote_Char);
writeEscapeString(target, writer);
writer.append(quote_Char);
}
public static void writeEscapeString(String value, Writer writer) throws IOException {
char[] chars = value.toCharArray();
for (char ch : chars) {
writerChar(ch, writer);
}
}
/**
* 处理特殊字符
*
* @return
* @throws IOException
*/
public static void writerChar(char ch, Writer writer) throws IOException {
switch (ch) {
case '\"':
writer.append(Anti_Slash).append('"');
return;
case '\'':
writer.append(Anti_Slash).append('\'');
return;
case '\\':
writer.append(Anti_Slash).append('\\');
return;
case '\b':
writer.append(Anti_Slash).append('b');
return;
case '\f':
writer.append(Anti_Slash).append('f');
return;
case '\n':
writer.append(Anti_Slash).append('n');
return;
case '\r':
writer.append(Anti_Slash).append('r');
return;
case '\t':
writer.append(Anti_Slash).append('t');
return;
// case '/':
// writer.append(Anti_Slash).append('/');
// return;
default:
writer.append(ch);
}
}
final static char Anti_Slash = '\\';
}