今天遇到一个很郁闷的问题,使用MessageFormat.applyPattern时一直抛出异常:
java.lang.IllegalArgumentException: can't parse argument number margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px;
经过检查是properties文件中的“{”引起的,因为这一段是css的style,但是applyPattern是将这个“{”当成占位符处理了,\u007B也试过了,不好使,没办法只能查看java源代码,这个方法的代码如下:
public void applyPattern(String pattern) {
StringBuffer[] segments = new StringBuffer[4];
for (int i = 0; i < segments.length; ++i) {
segments[i] = new StringBuffer();
}
int part = 0;
int formatNumber = 0;
boolean inQuote = false;
int braceStack = 0;
maxOffset = -1;
for (int i = 0; i < pattern.length(); ++i) {
char ch = pattern.charAt(i);
if (part == 0) {
if (ch == '\'') {
if (i + 1 < pattern.length()
&& pattern.charAt(i+1) == '\'') {
segments[part].append(ch); // handle doubles
++i;
} else {
inQuote = !inQuote;
}
} else if (ch == '{' && !inQuote) {
part = 1;
} else {
segments[part].append(ch);
}
} else if (inQuote) { // just copy quotes in parts
segments[part].append(ch);
if (ch == '\'') {
inQuote = false;
}
} else {
switch (ch) {
case ',':
if (part < 3)
part += 1;
else
segments[part].append(ch);
break;
case '{':
++braceStack;
segments[part].append(ch);
break;
case '}':
if (braceStack == 0) {
part = 0;
makeFormat(i, formatNumber, segments);
formatNumber++;
} else {
--braceStack;
segments[part].append(ch);
}
break;
case '\'':
inQuote = true;
// fall through, so we keep quotes in other parts
default:
segments[part].append(ch);
break;
}
}
}
if (braceStack == 0 && part != 0) {
maxOffset = -1;
throw new IllegalArgumentException("Unmatched braces in the pattern.");
}
this.pattern = segments[0].toString();
}
发现这一段:
if (ch == '\'') {
if (i + 1 < pattern.length()
&& pattern.charAt(i+1) == '\'') {
segments[part].append(ch); // handle doubles
++i;
} else {
inQuote = !inQuote;
}
}
原来转移符竟然是“\'”。。。想用单引号就写成“\'\'”
分享到:
相关推荐
本文侧重于了解自定义properties文件,以及properties中的数据格式,在gradle中如何使用等知识点。 一、概述 在Android Studio 创建一个项目的时候,rootProject下面会生成gradle.properties和local.properties文件...
java 改变Properties文件中的键值 java 改变Properties文件中的键值
eclipse下properties文件中文乱码的解决方案
ConfigFile configfile = ConfigFile.getInstance("ipConfig123.properties"); String ip = configfile.getkeyvalue("ip"); 可以取出ipConfig123.properties 文件中IP的内容
js读取properties文件,很好用的。js读取properties文件,很好用的。js读取properties文件,很好用的。js读取properties文件,很好用的。
进行properties文件的批量处理工具,能够用来改动部分参数而进行的文本提取修改工具。
java写的,用来比较properties文件的工具
读取properties文件返回map
properties文件读写操作
主要介绍了Python实现读取Properties配置文件的方法,结合实例形式分析了Python读取Properties配置文件类的定义与使用相关操作技巧,需要的朋友可以参考下
设置Eclipse中properties文件打开方式myeclipse一样有source和properties两个视图方法
解决JAVA读取properties中文乱码问题
此工具类只用于Java后端在操作Properties文件的时候写的工具类,方便properties文件的存取操作
在Struct2在读取语言包文件language.properties属性文件,如果文件中包含中文,会出现乱码。虽然可以native2ascii进行解决,但是使用起来不方便,为了解决这个问题,可以为Eclipse安装Properties Editor插件解决这个...
MyEclipse中Properties文件插件
java中properties文件读取demo
c#操作properties,读写配置文件,非常方便,几行代码就搞定
将一个时间写入本地文件properties中,并且能够从文件中读取出来,并且显示出来的一个Demo。
excel与properties文件相互转换
Intellij IDEA 中 .properties文件中文显示乱码问题的解决 - CSDN博客https://blog.csdn.net/qq_270934