转义 java 中的点。 (StringEscapeUtils)
Escaping dots in java. (StringEscapeUtil)
这可能是一个超级愚蠢的问题,但我不明白为什么 StringEscapeUtils 会以这种方式运行。
这是第二个失败的断言,错误如下:
org.junit.ComparisonFailure: Did not escape correctly Expected
:t\.ext
Actual :t.ext
测试
public class ServerDataTest {
@Test
public void escape() throws Exception {
assertEquals("Did not escape correctly", "text", ServerData.escape("text"));
assertEquals("Did not escape correctly", "t\.ext", ServerData.escape("t.ext"));
assertEquals("Did not escape correctly", "te\\xt", ServerData.escape("te\xt"));
assertEquals("Did not escape correctly", "te\\\.xt", ServerData.escape("te\.xt"));
}
}
逃生工具
private final static Map<CharSequence, CharSequence> ESCAPE_MAP = new HashMap<>();{
ESCAPE_MAP.put("\", "\\");
ESCAPE_MAP.put(".", "\.");
}
private static LookupTranslator ESCAPE = new LookupTranslator(ESCAPE_MAP);
private final static Map<CharSequence, CharSequence> UNESCAPE_MAP = new HashMap<>();{
UNESCAPE_MAP.put("\\", "\");
UNESCAPE_MAP.put("\.", ".");
}
private static LookupTranslator UNESCAPE = new LookupTranslator(UNESCAPE_MAP);
static String escape(String text){
return StringEscapeUtils.builder(ESCAPE).escape(text).toString();
}
static String unescape(String text){
return StringEscapeUtils.builder(UNESCAPE).escape(text).toString();
}
您永远不会填写静态地图 ESCAPE_MAP
和 UNESCAPE_MAP
,因为您忘记了关键字静态。
这是正确的代码
private final static Map<CharSequence, CharSequence> ESCAPE_MAP = new HashMap<>();
static {
ESCAPE_MAP.put("\", "\\");
ESCAPE_MAP.put(".", "\.");
}
我认为:
而不是
private final static Map<CharSequence, CharSequence> ESCAPE_MAP = new HashMap<>();{
ESCAPE_MAP.put("\", "\\");
ESCAPE_MAP.put(".", "\.");
}
你会写:
private final static Map<CharSequence, CharSequence> ESCAPE_MAP = new HashMap<CharSequence, CharSequence>() {
{
put("\", "\\");
put(".", "\.");
}
};
这可能是一个超级愚蠢的问题,但我不明白为什么 StringEscapeUtils 会以这种方式运行。
这是第二个失败的断言,错误如下:
org.junit.ComparisonFailure: Did not escape correctly Expected :
t\.ext
Actual :t.ext
测试
public class ServerDataTest {
@Test
public void escape() throws Exception {
assertEquals("Did not escape correctly", "text", ServerData.escape("text"));
assertEquals("Did not escape correctly", "t\.ext", ServerData.escape("t.ext"));
assertEquals("Did not escape correctly", "te\\xt", ServerData.escape("te\xt"));
assertEquals("Did not escape correctly", "te\\\.xt", ServerData.escape("te\.xt"));
}
}
逃生工具
private final static Map<CharSequence, CharSequence> ESCAPE_MAP = new HashMap<>();{
ESCAPE_MAP.put("\", "\\");
ESCAPE_MAP.put(".", "\.");
}
private static LookupTranslator ESCAPE = new LookupTranslator(ESCAPE_MAP);
private final static Map<CharSequence, CharSequence> UNESCAPE_MAP = new HashMap<>();{
UNESCAPE_MAP.put("\\", "\");
UNESCAPE_MAP.put("\.", ".");
}
private static LookupTranslator UNESCAPE = new LookupTranslator(UNESCAPE_MAP);
static String escape(String text){
return StringEscapeUtils.builder(ESCAPE).escape(text).toString();
}
static String unescape(String text){
return StringEscapeUtils.builder(UNESCAPE).escape(text).toString();
}
您永远不会填写静态地图 ESCAPE_MAP
和 UNESCAPE_MAP
,因为您忘记了关键字静态。
这是正确的代码
private final static Map<CharSequence, CharSequence> ESCAPE_MAP = new HashMap<>();
static {
ESCAPE_MAP.put("\", "\\");
ESCAPE_MAP.put(".", "\.");
}
我认为:
而不是
private final static Map<CharSequence, CharSequence> ESCAPE_MAP = new HashMap<>();{
ESCAPE_MAP.put("\", "\\");
ESCAPE_MAP.put(".", "\.");
}
你会写:
private final static Map<CharSequence, CharSequence> ESCAPE_MAP = new HashMap<CharSequence, CharSequence>() {
{
put("\", "\\");
put(".", "\.");
}
};